软考路(6)——工厂设计模式系列

简介:

每年软考中对于设计模式的考查是不可缺少的,因此对于这部分知识的准备也是须要花费一些精力的。以下分享一点儿自己在设计模式过程中学习的经历。

工厂系列分享例如以下:


******************************************工厂的引入***************************************

 

工厂的引入:控制对象的创建过程。


事实上使用newkeyword就是为了创建一个对象的。那么既然有了newkeyword,为什么又要使用工厂来控制对象的创建过程呢?答案例如以下:


newkeyword是不管你是谁都能够用它来创建对象,不加不论什么限制。工厂则对其创建的过程加入了限制。比如你有一个抽屉。抽屉中装满了钱。

使用newkeyword,不论你是谁都能够得到抽屉的钥匙。可是使用工厂则不一样了,工厂须要推断你是否具有拿到该抽屉的钥匙的权利,如果你是我儿子,那么你就能够拿到这把钥匙了,如果你不是我儿子,那么你就无权得到这把钥匙了。当然你更不可能得到抽屉中的钱了。


说白了工厂就是通过自身来创建对象的。

 

理解了工厂,我们再逐个理解简单工厂。工厂方法。抽象工厂。

 

*************************************简单&&工厂*****************************************


简单工厂:“简单工厂”简单点儿说就是为了将对象的创建过程单独封装独立。

 

图一:简单工厂类图


图二:简单工厂的工厂类的代码


解析:简单工厂就是利用图二中的代码来封装对象的创建过程的。

在其工厂类中包括了必要的逻辑推断,因此能够依据client的选择条件动态地实例化相关的类,对于client来说,去除了与详细产品的依赖。

 

*************************************工厂&&方法******************************************

 

工厂方法:在“简单工厂”的基础上进一步抽象和推广。使用“多态”克服了“简单工厂”在工厂内部进行分支推断的缺点。

 

图一:工厂方法类图


图二:先构建一个工厂接口


图三:加减乘除各建一个详细工厂去实现图二中的工厂接口


图四:client代码



解析:

通过观察。非常easy发现工厂方法在简单工厂的基础上,将“简单工厂类”中的每个分支都单独分装成了一个独立的类。

这样就攻克了“简单工厂”在加入一个类似“求M数的N次方”的功能时须要改动原有的工厂类的问题了。


工厂方法模式实现时,client须要解决实例化哪一个工厂来实现运算类,选择推断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑推断移到了client代码来进行。你想要加功能,本来是改工厂类的,而如今是改动client。

 

 

**************************************抽象&&工厂******************************************


抽象工厂:在工厂方法的基础上。为了解决创建一系列产品的问题。

 

图一:抽象工厂模式结构图


解析:


单纯从结构图来观察“工厂方法”和“抽象工厂”,似乎认为他们是一样的。抽象工厂仅仅是在“工厂方法”的基础上多添加一个“产品B”。事实上细致想想当初的设计的机房收费系统中关于抽象工厂这一块,倘若我们不考虑移植性,我们是否也就能够使用“工厂方法”呢,而不是“抽象工厂”呢?当初之所以採用“抽象工厂”。是考虑到系列产品的移植等问题。比如插入数据时Access必需要Insertinto,SQLServer能够不用intoSQL Server中的GetDate()在Access中没有,须要改成Now()

SQL Server是自成一体系的,而Access中的东西又一个体系。所以假设要更换数据库的话,当然是依照系列来更换的。

 

这里我们还须要理解一个词“系列”:许很多多有关联的事物。一连串的事物。事实上这个词联系生活还是挺好理解的,比如海尔的系列产品(组合产品)。

 

还有一个词就是“产品品种”了产品品种是相对于某一个系列产品的。

 

工厂方法与抽象工厂的差别:“工厂方法”是可以非常方便的加入一个产品品种(即一个功能)。可是须要加入一系列产品是则会造成工厂泛滥的问题。

可是对于“抽象工厂”而言。假设是要加入一个产品品种的话,则须要改动多个地方(AbstractFactoryConcreteFactory 1ConcreteFacotry 2


*************************************&&****************************************


总结:设计模式之学习,路漫漫其修远兮,吾将上下而求索!望批评指正!


版权声明:本文博客原创文章,博客,未经同意,不得转载。





本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4639380.html,如需转载请自行联系原作者


相关文章
|
7月前
|
设计模式 Java
设计模式之工厂
设计模式之工厂
|
27天前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
29 2
|
4月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
65 1
|
4月前
|
设计模式 XML 数据格式
python之工厂设计模式
python之工厂设计模式
python之工厂设计模式
|
4月前
|
设计模式 测试技术
依赖注入与工厂设计模式的区别
【8月更文挑战第22天】
73 0
|
6月前
|
设计模式 Java 编译器
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
|
5月前
|
设计模式 Java 开发者
工厂设计模式的实现与应用场景分析
工厂设计模式的实现与应用场景分析
|
7月前
|
设计模式
设计模式之工厂 Factory
设计模式之工厂 Factory
61 1
|
7月前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
7月前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式