
Design Pattern
文章平均质量分 55
kissjob
这个作者很懒,什么都没留下…
展开
-
设计模式-Adaptor
将一个类的接口转换成客户希望的另外一个接口。A d a p t e r 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。Input:Client ->Target.Request(), Adaptee.SecificRequest()Solution:1. Create a new class Adaptor:Target{1. 定义私有变量Adaptee原创 2009-05-22 14:45:00 · 458 阅读 · 0 评论 -
Proxy Pattern
动机:在需要用比较通用和复杂的对象指针来代替简单对象时,一般使用Proxy模式。参与:1.Proxy:保存对实际对象的引用;提供和实际对象一样的接口;分为Remote proxy(不同的地址空间)virtual proxy(可以缓存附加的信息)Protection proxy:(原创 2011-07-07 14:34:28 · 367 阅读 · 0 评论 -
Chain of Reqonsibility
动机:将发送者和处理者解耦。(提交请求的对象并不明确知道谁是最终的提供帮助的对象);基本想法是给每个能处理请求的对象一个机会;1)有多个对象可以处理一个请求,具体哪个对象处理由运行时决定;2)不明确指定接收者3)有可能该请求不会被处理;1.Handler:public abstr原创 2011-07-07 15:39:17 · 393 阅读 · 0 评论 -
Iterator Design Pattern
意图:提供一种方法可以顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示。别名:游标Cursor;关键思想:把对列表的访问和遍历从列表中分离出来,并且放在一个迭代器中Iterator中。Iterator负责跟踪当前元素的状态.Current,MoveNext();在C#中原创 2011-07-11 10:57:14 · 391 阅读 · 0 评论 -
Mediator Design Pattern
意图:一组对象定义良好,但是以复杂的方式进行通讯;一个对象引用很多其他对象,依赖关系复杂;减少了子类的生成;使得对象的通信集中化;把各个Colleague解耦;参与者:1)Mediator:中介;定义一个接口用于个同事Colleague之间的通信;public abstract原创 2011-07-11 13:50:06 · 510 阅读 · 0 评论 -
Observer Design Pattern
意图:定义对象间1对多的依赖关系,当一个对象状态发生变化时,所有依赖它的对象能自动得到通知;别名:依赖,发布/订阅;适用性:1,当一个模型有两方面,其中一方依赖另外一方;2;当对一个对象状态改变时,需要更新其他对象,但是不知道有对象需要受到影响;3.当一个对象需要改变另外一些对象原创 2011-07-11 15:32:44 · 393 阅读 · 0 评论 -
Template Design Pattern
1.意图:定义一个算法的框架,把一些步骤延迟到子类中去实现;2.适用:一次性实现一个算法的不变的部分,并且把可变的实现延迟到子类中去;子类的公共部分应该放在父类中去;参与者:1.抽象类AbstractClass:1)定义原语操作Primitive operation,需要子类去实原创 2011-07-13 15:40:26 · 436 阅读 · 0 评论 -
State Design Pattern
1.意图:允许一个对对象改变自己状态时改变他的行为;对象看起来修改了自己的类;2.适用性:1)一个对象的行为取决于他的状态,并且只有在运行时刻根据状态改变行为;2)一个操作中有庞大的条件分支,并且这些分支取决于他的状态;State模式把这些分支放在一个独立的类中,这一对象不依赖于原创 2011-07-13 14:09:58 · 816 阅读 · 0 评论 -
Strategy Design Pattern
1. 意图:定义一系列的算法,把他们封装起来,并且可以相互替换;2. Strategy:策略;定义公共算法的抽象接口abstract class Strategy { public abstract void AlgorithmInterface(); }3. Conc原创 2011-07-13 15:31:41 · 671 阅读 · 0 评论 -
An introduction to SOLID principles in OO design
Single Responsibility Principle"There should never be more than one reason for a class to change." — Robert Martin, SRP paper linked fromThe原创 2011-07-13 09:37:20 · 536 阅读 · 0 评论 -
Behavioral Pattern Summary
1.封装变化;当一个程序的某方面的特征经常变化时,则需要定义一个封装这方面的对象(模式)比如:Strategy对象封装一个算法;State对象封装一个状态;Meditor封装对象间的协议;Iterator封装遍历和访问一个聚集对象的方法;包括2方面,一个是封装这些行为的新对象,另原创 2011-07-13 16:25:20 · 387 阅读 · 0 评论 -
Anti Pattern
什么是 AntiPatterns为了提高软件项目成功的比率,专家学者提出许多先进的软件开发技术,例如 Iterative development process、对象导向技术、设计模式 (design patterns)、软件组件、平台与框架 (Platform & Framew转载 2011-07-14 10:14:36 · 770 阅读 · 0 评论 -
Command Pattern
动机:把一个请求封装为一个对象,使得不同的请求得到不同的响应;并且对请求进行排队,以及支持UnDo/Redo的操作。1.Receiver:知道如何执行请求的对象public class Receiver { public void Action()原创 2011-07-07 17:22:08 · 372 阅读 · 0 评论 -
Bridge Design
<br />可以把类接口的定义和实现进行分离;<br />1. Abstraction<br />-BusinessObject的接口定义,比Implementor的层次高<br /> <br />-包含ConcreteImplemtator的引用<br /> <br /><br />public abstract class Abstraction<br /> {<br /> protected Implementor _implementor;<br /> <br />原创 2011-05-09 12:54:00 · 413 阅读 · 0 评论 -
Composite
<br />部分和整体的关系,允许客户以统一的方式来访问对象;<br />1.Component<br />-提供统一管理Childen的接,Add/Remove<br />-统一的操作接口Operation<br /><br />public abstract class Component<br /> {<br /> protected string _name;<br /> public Component(string name)<br /> {<br原创 2011-05-09 13:43:00 · 550 阅读 · 0 评论 -
Strategy Pattern
定义一系列算法,使得可以互相替换,独立于客户的变化。1.避免了"If Else Then"2.客户不需要知道每个策略里的数据结构。3.客户需要创建具体需要哪一种Stragegy通过私有Strategy变量 Sample Code: public abstract class Strategy { abstract public void D原创 2009-06-01 14:31:00 · 353 阅读 · 0 评论 -
Decorator Design
<br />对基类的已有功能的扩展,不通过继承的方式来实现。<br />1.Component:<br />对已有对象的允许扩展的功能进行接口定义<br /><br />public abstract class Component2<br /> {<br /> //允许Decorator/子类动态修改的接口<br /> public abstract void Operation();<br /> }2.ConcreteComponentComponent的子类实现publ原创 2011-05-10 14:25:00 · 511 阅读 · 0 评论 -
Facade Design
<br />为一个子系统提供统一的接口;<br />1.Subsystem的类<br /><br />class SubSystemOne<br /> {<br /> public void MethodOne()<br /> {<br /> Console.WriteLine(" SubSystemOne Method");<br /> }<br /> }<br /><br />class SubSystemTwo<br /> {<br /> public void原创 2011-05-11 16:53:00 · 545 阅读 · 0 评论 -
Flyweight Design
<br />用来支持大量重复的数据的存储,比如很多相同的图元要存储在不同的图片/文档。<br />1)Flyweight:能对extrinsic state(外在状态)接收 和相应的接口。<br /> <br />public abstract class Flyweight<br /> {<br /> public abstract void Operation(int extrinsicState);<br /> }<br />2) ConcereteFlyweight:实现F原创 2011-05-30 11:02:00 · 463 阅读 · 0 评论 -
Singleton Design Pattern
确保任何时候系统中只有一个实例存在。public class Singleton{ private static Singleton _instance; public static Singleton GetInstance() { if (_instance == null) _instance = new Singleton(); return _instance. } private Singleton() {}}关键:1)把缺省构造函数改为私有。2)静态变量。原创 2011-04-27 09:52:00 · 388 阅读 · 0 评论 -
Simple Factory Design
实例化具有相同发方法的不同对象时,不需要暴露实例的详细逻辑。也就是说,这些对象具有相同的接口。public interface IProduct {string GetProductName();}public class ProductA : IProduct { string GetProductName() {return "this is Product A";}}public class ProductB : IProduct { string GetProductName() {retu原创 2011-04-27 12:25:00 · 403 阅读 · 0 评论 -
Factory Method
<br />实例化具有相同基类的一组对象,允许创建子类Creator来决定实例哪个对象Product。<br />参与:<br />1)Product:interface<br />2)Concrete Product: derived Product class<br />3)Creator:Abstract class<br />4)Concrete Creator: derived Creator class<br /> <br />Interface IProduct {string GetName原创 2011-04-29 12:39:00 · 339 阅读 · 0 评论 -
Abstract Factory
创建一组相关的产品。1)Abstract Factory Class:创建一组产品的接口2)Concrete Factory:继承Abstract Factory3)IProduct:一类产品的接口4)Concrete Product:继承Iproduct。5)Client:只包含AbstractFactory和IProduct的引用,不知道ConcreteFactory和ConcreteProduct的存在。public abstract class AbstractFactory{ public a原创 2011-04-29 12:55:00 · 437 阅读 · 0 评论 -
Builder Design
<br />允许修改产品的内部表示,同时也隐藏的装配产品的细节。<br />每个特定的生成器都是独立的。类似抽象工厂,返回有许多方法和对象组成的类,抽象工厂返回的是相关的产品类;<br />而生成器则是根据它的数据一步一步一的构建复杂的对象。<br />把复杂对象的生成从构造函数中分离出来。<br /> <br />1.Director:使用Builder来生成对象<br /><br />public class Director<br /> {<br /> public void Cr原创 2011-05-04 12:28:00 · 563 阅读 · 0 评论 -
Prototype Design
通过Clone/序列化的方法来创建对象.1.Prototype:包含Clone抽象接口public interface IPrototype2 { IPrototype2 Clone(); }2.ConcretePrototype:实现Prototype的接口public class ConcretePrototype : IPrototype2 { public IPrototype2 Clone() { return th原创 2011-05-04 12:38:00 · 571 阅读 · 0 评论 -
Adapter Design
把已经实现类的接口转化为客户端可以接受的接口,解决不同类的接口兼容问题。1.Target:客户端所需要的业务逻辑的接口public interface Target { void Request(); }2.Adaptee:对已经存在的类,定义接口。public class Adaptee { public void SpecificRequest() { return; } }3.Adapter:把Ada原创 2011-05-06 12:53:00 · 463 阅读 · 0 评论 -
Business Layer
1. Difference between BO and DTOA business object contains both data and behavior, and it can be considered a full-fledged active object par原创 2011-07-14 13:25:48 · 821 阅读 · 0 评论