数据加载中……
设计模式之Builder模式和Prototype模式

前面两篇文章中讨论一下创建型设计模式的工厂模式、抽象工厂模式、单例模式,今天就继续聊一聊创建型模式的剩下两种,Builder模式和Prototype模式。

1、Builder模式

何为Builder模式,其实Builder模式比较好理解,就是将一个复杂对象的创建过程分解成几个Step,而每个step又抽象出来。具体实现由每个子类自己来决定,在通过第三方的一个Driector类来实现组合Step的顺序以达到最终的创建这个复杂的对象。

具体可以见如下的图(from wiki):

从图中,我们可以看到Director的Construct类用于将每个step构建起来,Builder中的buildPart()具体抽象了创建的过程由继承类ConcreteBuilder的BuilderPart()来实现具体的构建。最终构建一个完整的Product。

后面在聊一下结合其他设计模式的理解,关于Builder和Abstract Factory。Builder主要是构造整理里面的每一个part。而Abstract Factory则是为了为统一类的Product提够工厂。还有关于Build Part,个人倒是觉得可以结合工厂模式来做,这样将每个part的实现由和ConcreteBuilder解耦合了,例如通过注入的方式来表明具体的实现。

突然想到,如果能把各种设计模式用的游刃有余那该是多么happy的一件事啊。


2、Prototype模式

和builder模式一样,Prototype也同样非常好理解,你可能经常不经意间就用到了它。例如你已经有一个某个类的对象了,现在你需要创建一个和本对象相同的新对象。(请注意理解这里相同的意思哦)那该如何呢?基本上就会想到Clone()方法了。没错,clone()方法就是原型模式的实现。下面先看一下原型模式的结构图(from 大话设计模式)


在原型模式中一般会要处理的就是深浅拷贝的问题,其实关于深浅拷贝也是比较好理解的。以java为例,java的内存分为四快:堆、栈、代码区、数据区。对象的引用放在栈,对象放在堆。对于clone()毫无疑问,会重新开辟一个堆空间构建新对象。对于该对象的基本类型复制为原对象的值。那么对于类类型呢?有两种方式:一种是同样开辟一个空间存放该类类型(注意这是一个递归的过程),这就是所谓的深拷贝;还有一种则是只是引用指向原对象类类型的实例,此为浅拷贝。

关于深拷贝一定要注意就是,这是一个递归的过程。你必须保此类所包含的所有类(包括递归包含),都实现了深拷贝。还有就是要求父类对象也实现对象也实现了clone()方法,并完成深拷贝。而且在子类的clone()中调用super.clone()方法。

Ps:在java中一般实现Cloneable接口中的clone()方法即可。
pdf下载:/Files/zhenxuanpan/设计模式之Builder模式和Prototype模式.pdf


 

posted on 2011-09-02 00:26 潘潘.eagle 阅读(361) 评论(0)  编辑  收藏 所属分类: Design Pattern


只有注册用户登录后才能发表评论。


网站导航: