在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
包括三个角色:
-Factory:工厂角色
-Product:抽象产品角色
-ConcreteProduct:具体产品角色
UML类图:
SimpleFactory.jpg
抽象产品角色
public abstract class Product {
//所有产品类的公共业务方法
public void methodSame() {
//公共方法的实现
}
//声明抽象业务方法
public abstract void methodDiff();
}
具体产品
//具体产品A
public class ConcreteProductA extends Product {
// 产品A实现方法
@Override
public void methodDiff() {
}
}
//具体产品B
public class ConcreteProductB extends Product {
//产品B实现方法
@Override
public void methodDiff() {
}
}
工厂角色
//工厂角色
public class Factory {
public static Product getProduct(String productType){
Product product = null;
if (productType.equalsIgnoreCase("A")) {
product = new ConcreteProductA();
//初始化设置product
}
else if (productType.equalsIgnoreCase("B")) {
product = new ConcreteProductB();
//初始化设置product
}
return product;
}
}
客户端
//客户端简单工厂使用
public class Client {
public static void main(String[] args) {
Product product = Factory.getProduct("A");
product.methodSame();
product.methodDiff();
}
}
简单工厂模式的优点
1.实现了对责任的分割,提供了专门的工厂类用于创建对象。
2.客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可。
3.可以在不修改任何客户端代码的情况下更换和增加新的具体产品类。
简单工厂模式的缺点
1.工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
2.增加系统中类的个数。增加了系统的复杂度和理解难度。
3.系统扩展困难,一旦添加新产品就不得不修改工厂逻辑。
4.由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。
适应环境
1.客户端只知道传入工厂类的参数,对于如何创建对象不关心。
2.工厂类负责创建的对象比较少。
参考:
https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/simple_factory.html#id23
网友评论