设计模式之抽象工厂模式
2017-03-31 23:29
183 查看
抽象工厂模式
定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。上一节讲到简单工厂模式,那抽象工厂模式就是简单工厂的升级版。不止是简单工厂一个工厂,而是N个工厂。一个具体工厂会有个产品族。而每一个具体工厂创建属于同一个产品族,但是分属于不同等级结构的产品。从图里可以看出简单工厂的身影,其实相当把多个简单工厂再进行管理。这次也是奶茶的例子,比如奶茶店扩大规模,要在各地方建设奶茶店,但是每个地方奶茶风格都不同。东部奶茶店有东部珍珠奶茶,西部奶茶店有西部珍珠奶茶。这时每个奶茶店需要独立出一个工厂。
代码示例
奶茶抽象工厂类,并且定义创建奶茶方法。
public interface MilkTeaFactory { MilkTea createMilkTea(String type); }
奶茶抽象类,用于定义规范。
public abstract class MilkTea {}
两个具体奶茶工厂类。根据传进的类型返回奶茶实例。
//西部奶茶工厂 public class WestMilkTeaFactory implements MilkTeaFactory{ public MilkTea createMilkTea(String type) { MilkTea milkTea = null; if (type.equals("珍珠奶茶")) { milkTea = new WestPearlMilkTea(); } else if (type.equals("抹茶奶茶")) { milkTea = new WestMatchalMilkTea(); } return milkTea; } } //东部奶茶工厂 public class EastMilkTeaFactory implements MilkTeaFactory{ public MilkTea createMilkTea(String type) { Mil 4000 kTea milkTea = null; if (type.equals("珍珠奶茶")) { milkTea = new EastPearlMilkTea(); } else if (type.equals("抹茶奶茶")) { milkTea = new EastMatchalMilkTea(); } return milkTea; } }
客户端
MilkTeaFactory factory = new EastMilkTeaFactory(); MilkTea milkTea = factory.createMilkTea("珍珠奶茶");//东部的珍珠奶茶 factory = new WestMilkTeaFactory(); milkTea = factory.createMilkTea("抹茶奶茶");//西部的抹茶奶茶
抽象工厂模式符合依赖倒置原则,依赖抽象而不依赖具体。如果西部奶茶换成东部奶茶,直接替换相应的子类。该模式缺点也非常明显,需要多个产品族才能发挥作用,也导致类膨胀。所以这模式并不常见。
工厂方法
除了简单工厂,抽象工厂模式。还有一种常见的方法,那就是工厂方法。工厂方法并不属于模式,只是一个方法。对外提供静态方法,作用是创建实例并且返回。通常实例不多都采取这种方式,类也不用扩充。public static MilkTea createMilkTea(String type) { MilkTea milkTea = null; if (type.equals("珍珠奶茶")) { milkTea = new PearlMilkTea(); } else if (type.equals("抹茶奶茶")) { milkTea = new MatchalMilkTea(); } return milkTea; }
总述
总的来说,抽象工厂需要很多的产品族才能发挥作用,平时不常见也不常用。不足之处望指教。相关文章推荐
- 设计模式C#描述——抽象工厂模式
- .NET设计模式-抽象工厂模式(Abstract Factory)
- 设计模式C#描述——抽象工厂模式
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 设计模式——创建型模式之 Abstract Factory抽象工厂模式
- [导入]C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)
- 设计模式C#描述——抽象工厂模式
- Java设计模式圣经连载(03)-抽象工厂模式
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 我的设计模式之旅(3)――抽象工厂模式AbstractFactory
- 设计模式实践(抽象工厂模式应用)—通信录的优化过程
- 设计模式之抽象工厂模式
- AspectJ实现设计模式(四)——抽象工厂模式
- .NET设计模式:抽象工厂模式(Abstract Factory)
- [导入]C#面向对象设计模式纵横谈(4):Abstract Factory 抽象工厂模式(创建型模式)
- 设计模式笔记-抽象工厂模式
- .Net设计模式之抽象工厂模式(Abstract Factory)
- .NET设计模式(3):抽象工厂模式(Abstract Factory)(转)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 设计模式(3)-抽象工厂模式(Abstract Factory)