一.定义:
由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例。
二.角色:
1.抽象产品角色:
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
public abstract class Product {
public abstract void produce();
}
2.具体产品角色
具体产品角色类继承抽象产品角色,实现各自产品的内部逻辑。
public class ProductOne extends Product{
@Override
public void produce() {
System.out.println("produce one");
}
}
public class ProductTwo extends Product{
@Override
public void produce() {
System.out.println("product two");
}
}
3.工厂角色
根据传进的参数,来生产不同的产品:
public class Fractory {
/**
* 生成产品
* @return
*/
public static Product produce(String productName){
Product product = null;
switch (productName){
case "one":
product = new ProductOne();
break;
case "two":
product = new ProductTwo();
break;
}
return product;
}
}
三.优缺点:
优点:实现代码解耦,创建实例和使用实例职责分离。
缺点:工厂类集中了所有实例的创建逻辑,如需要创建新的类就需要改变工厂类,会造成工厂逻辑过于复杂,若工厂类出错整个系统也会收到影响。
四.使用场景:
1.工厂类负责创建的对象比较少;
2.客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;