简单工厂、工厂方法、抽象工厂笔记
之前博客相关链接:
一、简单工厂
主要是三个角色:
- 工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的具体业务逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的java类实现
- 抽象产品:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个java接口或者抽象类来实现
- 具体产品:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个java类实现
最大的问题是:工厂类集中了所有产品的创建逻辑,形成了无所不能的全职类,违反了单一职责原则,最重要的是违反了开闭原则
二、工厂方法
工厂方法解决了简单工厂的缺点,简单工厂中的工厂就一个工厂类,工厂方法中抽象出一个顶层工厂。
分析下工厂方法中的角色:
-
抽象工厂:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
-
具体工厂:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。
-
抽象产品:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口
-
具体产品:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
优点:遵守了开闭原则、
缺点:每新增一个产品,都需要增加一个具体类和对象实现工厂,增大了开发量,另外系统复杂度也上升了。
三、抽象工厂模式
可以认为从简单工厂、工厂方法一步步演化成抽象工厂。
相比于工厂方法,一个工厂不止于只生产一个具体产品。
你所看得到的天才不过是在你看不到的时候还在努力罢了!