这几天在看设计模式,自己做过Java,也做过PHP,设计模式这块Java和PHP的思想是相通的.
发现一个对设计模式总结的比较好的博客:java 23种设计模式 深入理解
总结:
1.普通工厂和抽象工厂模式
1.1区别:
我自己的理解:普通工厂就如同工厂中的一条生产线,比如:一条生产鞋的生产线只能生产鞋(其中包括男鞋,女鞋,不同品牌的鞋,在工厂子类中可以定义鞋的属性),但是抽象工厂就如同一个服装厂,它不仅能生产鞋,还能生产衣服,帽子等等多种产品.
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
1.2抽象工厂的优缺点:
抽象工厂模式的优点
- 分离接口和实现
客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已。也就是说,客户端从具体的产品实现中解耦。
- 使切换产品族变得容易
因为一个具体的工厂实现代表的是一个产品族,比如从生产鞋到生产衣服只需要切换一下具体工厂。
抽象工厂模式的缺点
- 不太容易扩展新的产品
如果需要给整个产品族添加一个新的产品,那么就需要修改抽象工厂,这样就会导致修改所有的工厂实现类。比如在抽象工厂中新增一种产品(毛衣),那所有工厂的实现中都要加毛衣生产的实现.
未完待续.....................................................................................................