简单工厂模式,工厂方法模式及抽象工厂模式比较
按照顺序,是抽象程度依次加深。
简单工厂模式最易理解。
当需要一个相同的接口,但里面完成内容不同的时候,就可以用一个工厂来产生其中多个类的一个实例。它最明显的是有一个工厂类来产生接口实例。这里接口的意思不是指单指interface,也可以是一个基类
![](/images/cnblogs_com/king_astar/f-1.png)
工厂方法模式是简单工厂的抽象加深,它不需要一个独立来创建对象。而是通过子类延迟创建需要的对象。
![](/images/cnblogs_com/king_astar/f-2.png)
在汽车的对象里面包括了发动机对象,但发动机对象不是由特定的工厂类来产生,而是取决于到底是什么样的汽车,不同的汽车有不同的发动机对象,这就是交给了子类来完成。
而抽象工厂则有点类似 简单工厂模式 + 工厂方法模式。 它的好处是通过抽象类来隔离具体类,并通过唯一入口来决定产生什么具体类。我们使用它的前提条件是一系列相似的类,当然,有时候,具体类仍然有不同的特征,这个时候可以使用两种方法来解决: 1.通过基类定义所有的特征,有些子类完成,有些子类不完成;2.通过定义接口来公开,让特殊的子类完成。
简单工厂模式最易理解。
当需要一个相同的接口,但里面完成内容不同的时候,就可以用一个工厂来产生其中多个类的一个实例。它最明显的是有一个工厂类来产生接口实例。这里接口的意思不是指单指interface,也可以是一个基类
![](/images/cnblogs_com/king_astar/f-1.png)
工厂方法模式是简单工厂的抽象加深,它不需要一个独立来创建对象。而是通过子类延迟创建需要的对象。
![](/images/cnblogs_com/king_astar/f-2.png)
在汽车的对象里面包括了发动机对象,但发动机对象不是由特定的工厂类来产生,而是取决于到底是什么样的汽车,不同的汽车有不同的发动机对象,这就是交给了子类来完成。
而抽象工厂则有点类似 简单工厂模式 + 工厂方法模式。 它的好处是通过抽象类来隔离具体类,并通过唯一入口来决定产生什么具体类。我们使用它的前提条件是一系列相似的类,当然,有时候,具体类仍然有不同的特征,这个时候可以使用两种方法来解决: 1.通过基类定义所有的特征,有些子类完成,有些子类不完成;2.通过定义接口来公开,让特殊的子类完成。