文章目录[隐藏]
抽象工厂(一天一个设计模式-(2)抽象工厂)
(2)抽象工厂
按照单一原则,前面提到的工厂模型,一个工厂只生产一个对象,这样当业务复杂时,系统必然会显得非常臃肿。显然没有达到我们使用设计模式的目的。当我们的产品对象可以按级别分类时,指定工厂有没有可能按类别或级别创建一个类对象?这时候我们的抽象工厂就派上用场了。
今天的抽象工厂很好地解决了工厂子类只负责在工厂模型中创建一个产品的缺点。以下是对产品系列和产品等级概念的参考:
产品族:是产品族,比如美的品牌空 tune、洗衣机、电饭煲等。还有格力、奥克斯等。
产品等级:是产品类别,如美的空、格力空、奥克斯空等;都是空音。
因此,当存在多个产品层次结构时,抽象工厂可以用一个工厂层次结构创建多个具有不同产品层次结构的产品对象;然而,工厂方法模型更多的是一个产品层次结构。这是两者的主要区别。因此,当工厂层次结构可以创建属于不同产品层次结构的产品系列中的所有对象时,抽象工厂比工厂方法模式更简单、更有效。
1.抽象工厂设计原则
抽象工厂:所有工厂方法的父类;
一种实现抽象工厂的具体工厂;
抽象产品:一类产品的父类;
特定产品:由特定工厂制造的特定产品。
2.简单的案例
在课程产品家族的基础上,我们增加了两个产品,比如课程提供的录制视频和课程笔记。(横向和纵向划分业务。横向有Java和Python课程,纵向每个课程都有提供视频和笔记的功能。)
3.抽象工厂的注释
当添加新的产品对象时,很难扩展抽象工厂来生产新种类的产品。这是因为所有可能的产品集都在抽象工厂角色中指定。支持新种类的产品意味着扩展接口,这将涉及到对抽象工厂角色及其所有子类的修改,这显然会带来很大的不便。
Open closed principle的倾斜性:从上面的例子可以看出,添加一个工厂和产品族很容易,比如BigDataCourseFactory,但是添加产品级比如课程支持提供源代码就比较困难。
以上就是由优质生活领域创作者 嘉文社百科网小编 整理编辑的,如果觉得有帮助欢迎收藏转发~
本文地址:https://www.jwshe.com/590268.html,转载请说明来源于:嘉文社百科网
声明:本站部分文章来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。分享目的仅供大家学习与参考,不代表本站立场。