之前已经讲过「工厂方法模式」,所以按照进阶,我们再来看一下抽象工厂模式是如何在工厂方法模式的基础之上对其进行改善和丰富的。其实抽象工厂模式本质是在具体工厂类中创建多个具体的产品类,来满足对于「开放-封闭原则」的要求。抽象工厂模式也属于六个创建型模式之一,其余五个为:
- 简单工厂模式
- 工厂方法模式
- 单例模式
- 原型模式
- 建造者模式
简单工厂模式、工厂方法模式、抽象工厂模式属于依次递进,层层抽象的,完全可以放在一起循序渐进式的掌握,从入门到进阶。
抽象工厂模式的定义
提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为 Kit 模式。
抽象工厂模式的结构及角色
- AbstractFactory(抽象工厂):它声明了一组用于创建一族产品的方法,每一个方法对应一种产品。
- ConcreteFactory(具体工厂):它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。
- AbstractProduct (抽象产品):它为每种产品声明接口,在抽象产品中声明了产品所具有的业务方法。
- ConcreteProduct(具体产品):它定义具体工厂生产的具体产品对象,实现抽象产品接口中声明的业务方法。
概念其实没有什么新的概念,本质区别就是在具体工厂中直接创建多个具体产品,从你的业务角度来抽象,这些具体的对象一起被实例化之后可以满足一次模块化的业务需求,从而通过这种方式,减少多个抽象工厂的创建。
简单的继续拿「工厂方法模式」中的『鸟』来举例,在工厂方法模式中,我们分别创建了老鹰、知更鸟、信鸽三个具体工厂,但是可能在实际业务中,我们没必要分别创建,你无非就是想要他们飞嘛,那么他们可以其实抽象在一起,组成一个更有完整意义的业务,从而可以减少多个具体工厂的创建。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public interface BirdFactory { Eagle createEagleBird(); Letter createLetterBird(); Robin createRobinBird(); } public class AllBirdFactory implements BirdFactory { @Override public Eagle createEagleBird() { return new Eagle(); } @Override public Letter createLetterBird() { return new Letter(); } @Override public Robin createRobinBird() { return new Robin(); } } |
这样抽象下来之后呢,我们就不需要分别创建老鹰、知更鸟、信鸽三个具体工厂,只需要创建一个「AllBirdFactory」即可,然后在这一个具体工厂中创建这三个具体的鸟类就可以了。当然,老四的这个例子举的不是很恰当,不过意思是这个意思,个人觉得理解起来不难。
相关文章阅读
更博不易,如果觉得文章对你有帮助并且有能力的老铁烦请捐赠盒烟钱,点我去赞助。或者扫描文章下面的微信/支付宝二维码打赏任意金额(点击「给你买杜蕾斯」),也可以加入本站封闭式交流论坛「DownHub」开启新世界的大门,老四这里抱拳谢谢诸位了。捐赠时请备注姓名或者昵称,因为您的署名会出现在赞赏列表页面,您的捐赠钱财也会被用于小站的服务器运维上面,再次抱拳感谢。