周末再翻《Java与模式》,说说对创建类模式的一点理解。大家交流。
创建类模式,我主要关注的是Simple Factory、Factory Method、Builder这几个。
当然,其他一些模式可能更加常用,比如Singleton、Prototype,但比较简单,不涉及整体脉络,此处略去不述。
首先,说说Simple Factory。
创建类模式,都是对实例创建过程的封装。
Simple Factory,是最容易想到的封装方式,Client无需知道某类的instance是怎么弄出来的,直接跟工厂要实例就行了,而且是静态方法,调用起来也方便。此时,工厂(书中叫做Creator)挑起重担,何时创建什么实例、如何创建全部由他来操办。
当工厂的担子越来越重时,比如,产品种类猛增、各个产品实例的创建过程都比较复杂、判断创建何种产品实例的逻辑也越来越复杂,工厂的改动日趋频繁,而且严重地违反了Open-Close法则,不同产品类的创建代码互相影响,这就说明对变化的封装没有达到应用的效果,产品A的变化影响到了产品B。对Simple Factory的优化产生了Factory Method。
Factory Method。
不同产品的创建过程既然都有着各不相同的单独逻辑,很容易想到把这些各自繁衍的变化封装起来,于是,不同的产品由配套的Creator来创建实例。此时,系统更加复合Open-Cloase法则,增加了新产品,同时增加相应的Creator,他们都位于继承结构的叶子端,不影响枝干和其他兄弟叶子。
但,此时,Client就需要知道哪个产品是使用哪个Creator来获得实例的了。让Client知道得多了,并不一定是坏事,个人感觉这里的情况是更加符合接口隔离原则,获得了该原则带来的优势。
Abstract Factory。
用于产品系列,个人不是很喜欢这个模式。当然也欢迎大家讨论。该模式此处不述。
Builder。
如果某类的实例创建需要固定的几个步骤(我理解为几道工序或者几个零件),想到将生产、组装过程分开(脱开耦合、增加可插入性),再参考Template Method模式的思路,就产生了Builder模式。
再罗索一遍,创建类模式都是对实例创建过程的封装,不同模式适用于不同情况,使用得是否得当我觉得就是看对变化的封装做得好不好。
分享到:
相关推荐
从网上摘抄下来的一份设计良品,杜绝垃圾代码!
OO中对于23种设计模式的整理OO中对于23种设计模式的整理
ABAP OOALV报表开发,定义变量,选择屏幕定义,创建类,调用函数,是学习OOALV很不错的学习资料
5-互评-OO之接口-DAO模式代码阅读及应用
设计模式03-创建型模式 设计模式04-创建型模式2 设计模式05-建造者、原型模式 设计模式06-适配器、桥接、组合模式 设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大...
23个设计模式标准OO结构,还有code和图
软件工程软考认证,Java与设计模式,下午必考题,24种设计模式
SAP ABAP开发学习——第10课:OOALV(视频教程) 1.SAP ABAP开发入门学习 2.含视频教程学习、PPT、作业 3.视频非常清晰
设计模式——可复用的OO软件
这个经典的东西相信大家都听过吧,学软件的人离不开的知识
oo学习
第一册:《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导。 第二册:《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计...
ABAP OOALV报表开发,定义变量,选择屏幕定义,创建类,调用函数
二维码OO电子商务商业模式案例分析.pptx
2.ABAP OO可以实现一个类的多个实例 3.ABAP OBJECT通过继承进一步增强了程序代码的可重用性 4.ABAP OO是你可以通过接口(interface)来调用对象的业务逻辑,而不是直接去使用对象,这样就避免了你需要详细了解每一个...
这是我大学时做的一个控制台五子棋游戏,工作后进一步理解了面向对象及一些设计模式,故以现有的知识重写了一下此游戏,希望能帮到一些对C#感兴趣的朋友。
4,工厂方法模式:定义一个创建对象的接口,但由子类觉得要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 5,抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 6,...
实战OO_用例建模 实战OO_用例建模 实战OO_用例建模
设计OO软件是困难的;设计可重复使用的OO软件更是困难的。你必须设计成适当的类架构(静态的类架构及动态的互动关系)。这个类架构必须符合某一问体领域且需相当的一般化...学习模式可以避免我们再走过去失败的过程。
第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计...