从Java的角度理解设计模式85: 继续演化:对违反DIP原则的修复和应用创建型模式的展望

此文章摘自http://www.rzchina.net/forum/7

前面已经论述了违法DIP原则的最大坏处。幸运的是可以这么说,所有创建型模式的智慧很大程度上都是用以消除代码对DIP原则的违背,创建型模式提供了多种方法从(硬编码的)对类进行实例化的代码中,消除对具体类的引用;创建型模式使设计未必会变得更小,但会更为灵活。
以下初步浏览一下后续章节将要详细讲解的创建型模式,它们分别是静态工厂方法(Static Factory Method,简称静态工厂)模式、工厂方法(Factory Method,简称工厂)模式、抽象工厂(Abstract Factory)模式、单例(Singleton)模式、生成器(Builder)模式、原型(Prototype)模式。
1.Static Factory Method(静态工厂方法)模式
考虑代码9 Client类的说明部分所提建议:通过提炼出一个新类BuildingCreator,将静态的create()方法移入该类,并使该方法的返回值为抽象类Building,从而将创建行为委托给一个类的静态方法。这便是Static Factory Method模式的一种实现。
2.Factory Method(工厂方法)模式
考虑上述Static Factory Method模式,不妨从利用OO多态特性的角度出发作些变化:将BuildingCreator定义为抽象类,把create()定义为抽象方法,且返回值是抽象类型Building,这样就可以通过衍生BuildingCreator的子类并覆写create()方法,从而通过不同的BuildingCreator子类创建出不同的Building子类实例,达到了方便切换各种创建行为的目的。这便是Factory模式的一种实现。
3.Abstract Factory(抽象工厂)模式
考虑上述Factory Method模式,如果给BuildingCreator的create()方法引入一个对象作为参数,通过该参数来驱动创建不同的房间、门和墙壁,那么预期就可以通过不同的参数(参数对象子类化)来改变整个楼宇的组成(即整系列的房间、门和墙壁将会被替换)。这是Abstract Factory模式的一种效果:“牵一发而动全身”。
4.Singleton(单例)模式
考虑上述的楼宇系统需要新增一个保安执勤所驻的门房GuardRoom,整个系统中只有这一个门房对象的实例,且其它各个房间都可以迅速(通过呼叫装置)访问它。这便是Singleton模式的一种效果。
5.Builder(生成器)模式
如果传递一个对象给createMaze,这个对象可以在它所建造的迷宫中使用增加房间、墙壁和门的操作,来全面创建一个新的迷宫,那么你可以使用继承来改变迷宫的一些部分或该迷宫被建造的方式。这是Builder模式的一个例子。
6.Prototype(原型)模式
如果createMaze由多种原型的房间、墙壁和门对象参数化,它拷贝并将这些对象增加到迷宫中,那么你可以用不同的对象替换这些原型对象以改变迷宫的构成。这是Prototype模式的一个例子。
 
 
 
 
融智技术学苑(http://www.rzchina.net   )版权所有,本公司致力于提供更好更实用的Java培训课程,帮助学员迅速成为编程的行家里手,更多Java面试题/Java视频/Java教程请访问我们的网站.转载请保留这段文字。
s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值