Java设计模式(二)Prototype(原型),Builder和Singleton(单态)

创建模式(二)

Singleton(单态)

确保每个类只有一个实例,并提供它的全局访问点

 

个人认为这是个最简单的模式,一般在以下情况下使用

当一个类只能有一个实例,而且用户可以从一个众所周知的访问点访问它时,如非共享资源

 

 

Singleton的结构图很简单,就是一个类图

但这是一个特殊的类

1、私有的构造器

2、所有的域都是私有的

3、只有一个公有方法

1和2是为了确保 “每个类只有一个实例”,而3则是提供它的全局访问

 

除上术实现形式外 ,还可以用synchronized(传说中的lazy initialization)

大家查看代码查找区别:

 

 

Builder

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.


在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构 成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制” 来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。

 

使用情况

1、需要生成的产品对象有复杂的内部结构。如果很简单的话,那么使用这个模式可能就没有必要了。
2、需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。
3、在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。

 

 

主要参与者:

Builder建造

Director负责实现

ConcreateBuilder建造

Product实际要构建的产品,Client最终使用Product 的部分

 

要点

1、各部分分工职权明确,比如

Director负责监督 Builder构建并得到最后的产品

Client只能从Director处拿到 产品,不管你的生产过程

Builder生产并于Director

2、实现的是复杂产品(单个) 的生产过程

 

与工厂模式的区别:
工厂模式主要是涉及到产品的创建,并且产品只有极其简单的构建过程或者根本就不需要额外的构建。
而Builder模式则恰恰相反,它主要构建有复杂的构建过程的产品。

工厂模式一般涉及多个产品的创建,而builder模式只负责创建一个产品。


Prototype(原型)

通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类型对象。

 

在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它却拥有比较稳定一致的接口。如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变。

Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

 

使用情况:

(主要的不容易产类的对象)

1、对象的构建十分复杂

2、 对象 经常面临着剧烈的变化

 

主要参与者:

Prototype(原型)

具体形式

Client使用者


要点

1、解决如何clone的问题

2、统一一个原型很重要

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章