随笔分类 -  设计模式

摘要:1、出现原因1、在面向对象系统中,我们常会遇到一类具有“容器”特征的对象——即它们在充当对象的同时,又是其他对象的容器。如何将“客户代码与复杂的对象容器结构”解耦(将这种组合容器对象设计成树形结构,从而可以对下面所有的容器都可以通过最上层的根对象实现统一的调用,进而客户端就不在乎其内部是怎么实现的,耦合降低了)?让对象容器自己来实现自身的复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂的对象容器?2、意图将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。(通过树根对象的执行方法,从而调用他下面的所有的子节点)3、结构图4 阅读全文
posted @ 2014-03-10 00:14 小小gogo 阅读(723) 评论(0) 推荐(0) 编辑
摘要:1、出现原因1、同一个类型,有两个变化的维度(两个维度的抽象:一个抽象部分的抽象,一个实现部分的抽象)2、如何应对这种“多维度的变化”?如何利用面向对象技术来使得同一类型可以轻松地沿着两个方向变化,而不引入额外的复杂度?2、具体的例子数据库操作 操作类型:增删改查(具体功能的实现部分) 操作对象:客户,订单,产品…(对应上面的增删改查是1对多的关系(通过聚合关系联系起来))手机软件 软件功能:通讯录,游戏 支持品牌:M(摩托骡拉),N(喏鸡呀)计算机软件 软件功能:游戏,开发工具,绘图软件… 运行平台:Windows,Unix….过度的使用继承: ——以手机软件为例:以手机品牌分类:以手机软. 阅读全文
posted @ 2014-03-08 01:56 小小gogo 阅读(1029) 评论(1) 推荐(0) 编辑
摘要:1、出现原因:在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。(所以可以在他们之间建立一个适配器的中间类)2、意图:将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。(就是在新环境的接口和原来的类之间建立一个适配器,将他们联系起来)3、两种实现适配器模式的方式1》对象适配器推荐使用,因为相对于下面的类继承的方式耦合度更低结构图:1、对象适配器采用对象组合,通过引用一个类(原来的类)与另一个类接口(实现新的环境接口)在对象适配器中通过组合获得Adap 阅读全文
posted @ 2014-03-06 18:29 小小gogo 阅读(1316) 评论(0) 推荐(0) 编辑
摘要:1、出现原因在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?2、意图:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。(将相同的部分进行赋值拷贝,不同的部分需要客户端自己决定)3、结构图4、代码演示举例:比如楼房的基本信息是相同的,但是他们的门牌号码是不同的,需要客户自己决定的。 1 //原型接口 2 public interfa... 阅读全文
posted @ 2014-03-05 16:53 小小gogo 阅读(658) 评论(0) 推荐(0) 编辑
摘要:一、简单工厂实现如下: 1 //计算器总的抽象类 2 public abstract class Computer 3 { 4 private int _NumberA; 5 private int _NumberB; 6 public int NumberA 7 { 8 set { 9 _NumberA = value;10 }11 get12 {13 ... 阅读全文
posted @ 2014-03-03 21:25 小小gogo 阅读(832) 评论(1) 推荐(2) 编辑
摘要:1、出现原因在软件系统中,有时候会面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂的对象的各个部分可能面临着剧烈的变化,但是把他们组合在一起的算法很稳定。提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求的改变而改变2、意图:将复杂对象的构建与其表示相分离(客户不关心这个复杂对象产品内部是怎么创建的),使得同样的构建工程可以创建不同的表示。3、结构图4、现实的简易的例子1、客户找到包工头,要求建一个房子,2、包工头找到不同的建筑队(Builder)来建筑房子的每个部分,建好房子后,交付给客户3 阅读全文
posted @ 2014-02-27 23:23 小小gogo 阅读(1891) 评论(0) 推荐(1) 编辑
摘要:单例模式:核心思想:类只实例化一次,并且提供一个全局访问点。(只有那个全局访问点对外开放,其他内容封装起来)图片解析:优点:1》由于实例是在Instance属性方法内部创建的,因此类可以使用附加功能2》直到对象要求产生一个实例才执行实例化;这种方法称为“惰性实例化”。惰性实例化避免了在应用程序启动时实例化不必要的singleton。代码:第一版本:(在单线程里面使用(不考虑线程内安全问题))主要分为三步:1、静态实例变量(用于接收实例成员)2、构造函数私有化(外部不能实例化,不能获得实例)3、全局访问点(任何用户都从这里访问) 1 //sealed:私有类:太监类(不能被继承) 2 ... 阅读全文
posted @ 2013-11-30 16:48 小小gogo 阅读(650) 评论(2) 推荐(0) 编辑