上一页 1 2 3 4 5 6 7 ··· 9 下一页
摘要: 概述组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。意图将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。[GOF《设计模式》]结构图效果及实现要点1.Composite模式采用树形结构来实现普遍存在的对象容器,从而将“一对多”的关系转化“一对一”的关系,使得客户代码可以一致地处理对象和对象容器,无需关心处理的是单个的对象,还是组合的对象容器。2.将“客户代码与复杂的对象容器结构”解耦是Com 阅读全文
posted @ 2011-07-12 16:10 二锅头 阅读(262) 评论(0) 推荐(0)
摘要: 意图动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。[GOF《设计模式》]在软件开发中,经常会遇到动态地为一个对象而不是整个类增加一些功能的问题,还是以我惯用的记录日志的例子来说明吧(也许在Decorator模式里面用这个例子不是特别合适)。现在要求我们开发的记录日志的组件,除了要支持数据库记录DatabaseLog和文本文件记录TextFileLog两种方式外,我们还需要在不同的应用环境中增加一些额外的功能,比如需要记录日志信息的错误严重级别,需要记录日志信息的优先级别,还有日志信息的扩展属性等功能。在这里,如果我们不去考虑设计模式,解决问题的 阅读全文
posted @ 2011-07-12 10:52 二锅头 阅读(210) 评论(0) 推荐(0)
摘要: 概述在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。意图将抽象部分与实现部分分离,使它们都可以独立的变化。[GOF《设计模式》]我们仍然用日志记录工具这个例子来说明Bridge模式。现在我们要开发一个通用的日志记录工具,它支持数据库记录DatabaseLog和文本文件记录FileLog两种方式,同时它既可以运行在.NET平台,也可以运行在Java平台上。效果及实现要点1.Bridge模式使用“对象间的组合关系”解耦了抽象和实现 阅读全文
posted @ 2011-07-11 15:39 二锅头 阅读(205) 评论(0) 推荐(0)
摘要: 意图将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。实现要点1.Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。2.Adapter模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。3.Adapter模式的实现可以非常的灵活,不必拘泥于GOF23中定义的两种结构。例如,完全可以将Adapter模式中的“现存对象”作为新 阅读全文
posted @ 2011-07-11 14:32 二锅头 阅读(229) 评论(0) 推荐(0)
摘要: 意图用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这个结构说明原型模式的客户端程序(client)是依赖于接口(IColorPrototype),而对象的具体实现也是依赖于接口(IColorPrototype)。符合设计模式原则中的依赖倒置原则——抽象不应依赖于具体实现,具体实现应依赖于抽象。实现要点1.使用原型管理器,体现在一个系统中原型数目不固定时,可以动态的创建和销毁,如上面的举的调色板的例子。2.实现克隆操作,在.NET中可以使用Object类的MemberwiseClone()方法来实现对象的浅表拷贝或通过序列化的方式来实现深拷贝。3.Prototype模式同样用于 阅读全文
posted @ 2011-07-11 10:46 二锅头 阅读(206) 评论(0) 推荐(0)
摘要: 世界是普遍联系的,因此程序世界中的类,也不可能是孤立的。UML为我们定义了它们之间的关系,就是:依赖、关联、聚合、组合还有泛化。 泛化关系比较好理解,就是表示类之间的继承关系。容易混淆的是依赖、关联、聚合和组合的关系。这里做一些甄别: 1、依赖和关联的颠倒颠 在网上查找了一下依赖和关联的区别,有说“关联本身即是一种依赖”,亦有说“依赖是一种弱关联”,其实说来说去是一档子事。依赖和关联都是说一个类用到了另一个类。其区别在于一个是使用,一个是拥有。依赖:具有某种偶然性。比如说我要过河,没有桥怎么办,我就去借来一条小船渡过去。我与小船的关系仅仅是使用(借用)的关系。表现在代码上,为依赖的类的某个方法 阅读全文
posted @ 2011-07-10 15:46 二锅头 阅读(435) 评论(1) 推荐(0)
摘要: 意图定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。 参与者: 工厂角色(Ilog)是简单工厂模式的核心,它负责实现创建所有具体产品类的实例。工厂类可以被外界直接调用,创建所需的产品对象。 抽象产品角色(txtlog,fielog)是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口。 具体产品角色(client)继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标。工厂类返回的都是该角色的某一具体产品。 代码 阅读全文
posted @ 2011-07-10 13:50 二锅头 阅读(222) 评论(0) 推荐(0)
摘要: 单例模式分为2种:一种是饿汉模式:自己主动实例化。 public sealed class 单例 { private 单例() { } static readonly 单例 instance = new 单例(); public static 单例 Instance { get { return instance; } } }通常这种方式readonly跟static一起使用,它的初始化交由静态字段实现,并可以在运行时编译。(静态变量直接在后面赋值,编译成IL之后是在和在静态构造函数里面实例化是一样的.因此也可以写到stati 单例(){}里) 这种模式我们无需自己解决线程安全性问题。CLR会 阅读全文
posted @ 2011-07-08 15:01 二锅头 阅读(381) 评论(0) 推荐(0)
摘要: 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式在生活中的实例咱们继续拿怎么穿衣服来说明这个抽象工厂模式。就拿你来说吧。工作了,为了参加一些聚会,肯定有两套或多套衣服吧,比如说有商务装(成套,一系列具体产品)、时尚装(成套,一系列具体产品),甚至对于一个家庭来说,可能有商务女装、商务男装、时尚女装、时尚男装,这些也都是成套的,即一系列具体产品。咱们假设一种情况(现实中是不存在的,要不然,没法进入共产主义了,但有利于说明抽象工厂模式),在你的家中,某一个衣柜(具体工厂)只能存放某一种这样的衣服(成套,一系列具体产品),每次拿这种成套的衣服时也自然要从这个衣柜 阅读全文
posted @ 2011-07-08 11:32 二锅头 阅读(283) 评论(0) 推荐(0)
摘要: 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色。具体建造者类必须实现这个接口所要求的方法:一个是建造方法,另一个是结果返还方法。具体建造者(Concrete Builder)角色:担任这个角色的是于应用程序紧密相关的类,它们在应用程序调用下创建产品实例。这个角色主要完成的任务包括:实现Builder角色提供的接口,一步一步完成创建产品实例的过程。在建造过程完成后,提供 阅读全文
posted @ 2011-07-08 09:36 二锅头 阅读(321) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 ··· 9 下一页