simple factory design pattern
简单工厂模式的概念、简单工厂模式的结构、简单工厂模式优缺点、简单工厂模式的使用场景、简单工厂模式的实现示例
注:简单工厂模式没有被收录在 GoF 的二十三种设计模式中。
1、简单工厂的概念
简单工厂模式,与其说是设计模式,不如称它为编程习惯。简单工厂只提供了简单的对象生产能力,且违反了软件设计原则的 开闭原则。其没有被收录在 GoF 的二十三种设计模式中。
2、简单工厂的结构
- 抽象产品:定义了产品的行为。
- 具体产品:实现了抽象产品接口,使产品具像化。
- 具体工厂:实现了生产产品的功能。
3、简单工厂的优缺点
3.1、优点
- 封装了对象创建的具体过程,使对象的创建的使用分离,降低耦合度。
3.2、缺点
- 违反了开闭原则。若增加了新产品,则需要修改工厂类代码。
4、简单工厂的使用场景
- 需要将对象创建过程与对象使用过程解耦时。
- 产品固定或变化率低时。
5、简单工厂的实现示例
抽象产品:
public interface Product {
/**
* 定义产品行为
*/
void behavior();
}
具体产品一:
public class OneProduct implements Product {
@Override
public void behavior() {
System.out.println("我是产品一");
}
}
具体产品二:
public class TwoProduct implements Product {
@Override
public void behavior() {
System.out.println("我是产品二");
}
}
工厂类:
public class ProductFactory {
/**
* 生产产品
* @param type
* @return
*/
public Product product(String type) {
Product product;
if ("one".equals(type)) {
product = new OneProduct();
} else if ("two".equals(type)) {
product = new TwoProduct();
} else {
throw new RuntimeException("暂不能生产该类型产品");
}
return product;
}
}
测试类:
public class SimpleFactoryTest {
public static void main(String[] args) {
ProductFactory factory = new ProductFactory();
Product product = factory.product("one");
Product product1 = factory.product("two");
product.behavior();
product1.behavior();
Product product2 = factory.product("three");
}
}
测试结果:
我是产品一
我是产品二
Exception in thread "main" java.lang.RuntimeException: 暂不能生产该类型产品
at org.xgllhz.designpattern.createtype.simplefactory.ProductFactory.product(ProductFactory.java:23)
at org.xgllhz.designpattern.createtype.simplefactory.SimpleFactoryTest.main(SimpleFactoryTest.java:19)