四、抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
假设现在需要针对每种产品生产对应的赠品,难道我们要新增一个Gift的生产工厂吗?其实没有必要,因为在这个场景下,每种产品必须附带了赠品,所以我们可以利用原有的工厂来生产赠品。
先定一个共同的Gift接口
public interface Gift { String getGiftName(); }
增加GiftA、GiftB、GiftC
public class GiftA implements Gift { @Override public String getGiftName() { return "GiftA"; } }
修改Factory接口,增加生产Gift的方法
public interface IFactory { Product createProduct(); Gift createGift(); }
修改工厂方法模式下的FactoryA、FactoryB、FactoryC
public class FactoryA implements IFactory { @Override public Gift createGift() { return new GiftA(); } @Override public Product createProduct() { return new ProductA(); } }
生产产品和赠品 IFactory factoryA = new FactoryA(); Product productA = factoryA.createProduct(); Gift giftA = factoryA.createGift();
总结:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需制定他们具体的类。抽象工厂接口,应该包含所有的产品创建的抽象方法,我们可以定义实现不止一个接口,一个工厂也可以生产不止一种产品类,和工厂方法模式一样,抽象工厂模式同样实现了开发封闭原则
简单工厂模式、工厂方法模式与抽象工厂模式的区别参考地址:https://www.jianshu.com/p/d27d698802fd
五、简单工厂模式、工厂模式与抽象工厂设计模式的区别
简单工厂模式和工厂方法模式的区别
1、简单工厂模式中包含判断什么对象的逻辑,而工厂方法模式则需要调用者判断要实例化什么具体类型的工厂进而创建出想要的对象。当增加新类时,简单工厂模式需要修改工厂类,而工厂方法模式不需要,因此工厂方法模式遵守了开闭原则,而简单工厂模式没遵守。
2、简单工厂模式因为采用了静态方法,所以不利于继承,而工厂方法模式恰恰相反,需要利用到继承来从抽象工厂中派生出各种各样的具体工厂。
3、抽象工厂模式的优点和缺点
抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。
产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。
简单工厂模式和工厂方法模式的区别:https://www.cnblogs.com/winsons/p/12490359.html