定义
它属于类创建型模式,可以根据参数的不同返回不同类的实例,它专门定义一个类负责创建其他类的实例,被创建的实例通常都有共同的父类
结构
1.工厂
负责实现创建产品的内部逻辑,可以被外界直接调用,创建所需的对象
2.抽象产品
工厂类创建的所有对象的父类,封装了所有产品的公共方法
3.产品
工厂所创建出来的目标,所有产品都是某个具体类的实例,实现了抽象产品中的抽象方法
以运算为例
工厂类:OperationFactory
此处只给出了加法运算,而想要添加其他运算,只需要,创建一个继承抽象类的运算类,在switch中增加一个case即可,注意此处为statitc方法,所以也称其为静态工厂模式
抽象产品类:Operation
此处给出了一个运算的抽象类,公共方法有get和set方法,还有一个根据运算类型的不同而需要重写的getResult方法。
产品类:OperationAdd
继承Operation类并重写getResult方法
客户端:Client
这里只作演示,我们只需要提供"+" 1 2这三个参数即可让工厂工作
结果
总结
当我们需要更加具体类型的运算时,只需要去到具体类型的类中修改,想要增加其他运算时,就增加相应的运算子类并且在工厂中增加该运算分支。
优点
1.免除了客户端直接创建产品对象的责任
2.客户端无需直到所创建的具体参数类名,只需要提供相应参数即可
3.通过引入配置文件可以在不修改客户端代码情况下更换和增加新的具体产品
缺点
1.工厂类集中了所有产品的创建逻辑,一旦不能工作整个系统都会受到影响
2.对象较多时系统中存在的类较多
3.一旦提娜佳新产品就得修改工厂逻辑,破坏开闭原则
4.由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构
适用环境
1.工厂负责创建的对象比较少
2.客户端只需要知道对应参数时