白话设计模式--创建型设计模式总结

到今天为止把创建型的几种设计模式算是学完了,搞一段落.进行一下总结.

时间比较短,还好创建型的比较简单,以后估计不会这么顺利了.由于没有真正的实践在项目中,所以到现在为止,我认为我还没有掌握,仅仅是对设计模式有些了解而已.

人家说英语是说出来的,所以我也把我知道的关于创建型的设计模式的相关知识总结出来,供大家参考和讨论,希望能与各位同仁共同进步.

 

创建型模式,主要用来解决new所带来的对象间的耦合关系,除了singleton和prototype之外,都需要使用factory来负责对象的实例化,prototype是通过原型(也就是抽象)来克隆对象。

 

白话一点儿说,创建型模式就是把有可能经常变化的对象单独拎出来处理,使这些经常变化的部分在发生变化时不会影响整个系统。

 

GOF设计模式有5种是创建模式.

其中Singleton模式用来控制对象创建的个数,一般是一个,可以通过变化创建指定数量的对象.

 

factory method模式是最最基础的创建型模式,也是最基础的设计模式之一。既然是面向对象编程,当然要创建对象。factory method模式就是解决了对象的基本创建问题。对象通过自己的工厂创建实例,在创建点不依赖具体实现而仅仅依赖于对象自己的抽象。编译时只知道要创建哪种对象(抽象),运行时才知道具体会创建这种对象的哪个对象。反正一种对象的行为都是相似的,所以抽象也是一样的。只是具体实现不同。比如车都能转弯,只是摩托车和汽车转弯的具体实现不同,但抽象是相同的。这里编译时只说车要转弯,在运行时再具体告诉程序是哪个车要转弯。

 

abstract factory模式是在factory method模式的基础上发展而来, factory method模式只解决了创建哪个对象的问题,而abstract factory解决了创建哪个系列对象的问题。这一系列对象之间可能有很多关联和交互。白话点而说就是,比如我们肯定都用床上用品,包括床单,被罩和枕巾等。我们不会一辈子都用一套吧,肯定要换洗的,有坏的还得换新的(这里假设整套整套坏/换)。那么abstract factory就用上了。一次创建一套床上用品,不用修改任何地方,只需要增加新的床单类,被罩类和枕巾类,然后在调用时告诉系统,我要用这个新的。就OK了,符合了面向对象的对修改关闭对扩展开放的原则。

 

builder模式与factory method一样,都是创建一个对象。但是它却是创建了一个超级复杂的对象。它可以让我们通过相同的创建过程创建出不同的表示。在这里,创建对象的算法是稳定的,但是对象的各个部分却是不稳定的,经常会变。比如要建造一个房子,建造房子的过程,比如打地基,搭架子,垒砖这些骨干的过程是不变的,这是稳定的算法。但是在造门和窗户的时候却有可能经常发生变化。有可能这个房子要用A工厂的门,那个房子却要用B工厂的门。这是就要用到builder模式了。不管你用谁的门,但是造出来的肯定得是房子。

 

prototype模式诠释了面向对象的依赖倒置原则。当一个Manager对象依赖某个具体实现时,我们把这个实现抽象出来(前提是这个对象是易变的),使Manager对象依赖于这个抽象,这样,以后扩展新的基于这个抽象的实现就会easy了。而manager里通过抽象的克隆创建需要数量的对象。这样,manager只依赖抽象。我想这也是我们提倡面向接口编程的原因。

 

总之,创建型模式解决了软件设计中对象创建的问题,通常,往往是我们遇到了易变类,才会使用创建型模式,至于使用哪种,就要看易变类和系统的特性了。

 

欢迎大家拍砖。我知道这文章简单浅显,只希望牛人飘过不留痕,菜鸟飞过有收获。

posted @ 2008-08-20 15:35  GodSpeed  阅读(2207)  评论(1编辑  收藏  举报