首页 > 其他 > 详细

设计模式学习整理(三)

时间:2014-03-20 19:39:28      阅读:498      评论:0      收藏:0      [点我收藏+]

建造模式

GOF给建造模式的定义为:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这句话说得很抽象,不好理解,其实它的意思可以理解为:将构造复杂对象的过程和组成对象的部件解耦。就像攒电脑一样,不管什么品牌的配件,只要兼容就可以装上;同样,一样的配件,可以有好多组装的方式。这是对降低耦合、提高可复用性精神的一种贯彻。 
当要生成的产品有复杂的内部结构——比如由多个对象组成;而系统中对此产品的需求将来可能要改变产品对象的内部结构的构成,比如说产品的一些属性现在由一个小对象组成,而更改后的型号可能需要N个小对象组成;而且不能将产品的内部构造完全暴露给客户程序,一是为了可用性,二是为了安全等因素。满足上面的设计环境就可以考虑使用建造模式来搭建框架了。 
来看看建造模式的组成吧。 
1) 抽象建造者角色:这个角色用来规范产品对象的各个组成成分的建造。一般而言,此角
色独立于应用程序的业务逻辑。 2) 具体建造者角色:担任这个角色的是于应用程序紧密相关的类,它们在指导者的调用下
创建产品实例。这个角色在实现抽象建造者角色提供的方法的前提下,达到完成产品组装,提供成品的功能。 
3) 指导者角色:调用具体建造者角色以创建产品对象。指导者并没有产品类的具体知识,
真正拥有产品类的具体知识的是具体建造者对象。 
4) 产品角色:建造中的复杂对象。它要包含那些定义组件的类,包括将这些组件装配成产
品的接口。

 

建造模式可以使得产品内部的表象独立变化。在原来的工厂方法模式中,产品内部的表象是由产品自身来决定的;而在建造模式中则是“外部化”为由建造者来负责。这样定义一个新的具体建造者角色就可以改变产品的内部表象,符合“开闭原则”。 
建造模式使得客户不需要知道太多产品内部的细节。它将复杂对象的组建和表示方式封装在一个具体的建造角色中,而且由指导者来协调建造者角色来得到具体的产品实例。 
每一个具体建造者角色是毫无关系的。 
建造模式可以对复杂产品的创建进行更加精细的控制。产品的组成是由指导者角色调用具体建造者角色来逐步完成的,所以比起其它创建型模式能更好的反映产品的构造过程。

原型模式

原型模式属于对象创建模式,GOF给它的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 
在Java中提供了clone()方法来实现对象的克隆,所以Prototype模式实现变得简单许
多。注:clone()方法的使用,请参考《Thinking in Java》或者《Effective Java》
,对于许多原型模式中讲到的浅克隆、深克隆,本文不作为谈论话题。 
使用克隆方式来创建对象与同样用来创建对象的工厂模式有什么不同?前面已经提过
工厂模式对新产品的适应能力比较弱:创建新的产品时,就必须修改或者增加工厂角色。而且为了创建产品对象要先额外的创建一个工厂对象。那通过原型模式来创建对象会是什么样子呢?  先让我们来看看原型模式的结构吧。 
1) 客户角色:让一个原型克隆自己来得到一个新对象。 
2) 抽象原型角色:实现了自己的clone方法,扮演这种角色的类通常是抽象类,且它具有
许多具体的子类。 
3) 具体原型角色:被复制的对象,为抽象原型角色的具体子类。 

 

于clone方法在java实现中有着一定的弊端和风险,所以clone方法是不建议使用的。因此很少能在java应用中看到原型模式的使用。但是原型模式还是能够给我们一些启迪。

设计模式学习整理(三),布布扣,bubuko.com

设计模式学习整理(三)

原文:http://3409736.blog.51cto.com/3399736/1380333

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!