导航

.NET设计模式

Posted on 2007-02-26 00:06  taoeternal  阅读(1157)  评论(0)    收藏  举报

纯粹为了方便,完整地将terrylee的文章链接搬过来(够懒的;))
.NET设计模式(19):观察者模式(Observer Pattern)

     摘要: 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。

通过Observer模式,把一对多对象之间的通知依赖关系的变得更为松散,大大地提高了程序的可维护性和可扩展性,也很好的符合了开放-封闭原则。

1.Observer模式解说

2..NET中的Observer模式

3.推模式和拉模式

——————————————————————————————————————————
2006年10月25日 0:00更新,增加了推模式和拉模式的区别,感谢idior  阅读全文

posted @ 2006-10-23 23:49 TerryLee 阅读(3950) | 评论 (49)  编辑 |

     摘要: Iterator模式分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。

主要内容

1.Iterator模式解说

2.DotNET中的Iterator模式

……  阅读全文

posted @ 2006-09-16 10:40 TerryLee 阅读(2958) | 评论 (15)  编辑 |

     摘要: .NET设计模式系列,共分为30章,本部分内容不断更新中。  阅读全文

posted @ 2006-07-17 18:29 TerryLee 阅读(50344) | 评论 (155)  编辑 |

     摘要: 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合[李建忠]。这就是本文要说的Command模式。

主要内容

1.概述

2.Command模式解说

3..NET中的Command模式

……  阅读全文

posted @ 2006-07-17 18:11 TerryLee 阅读(3053) | 评论 (19)  编辑 |

     摘要: Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要。



主要内容

1.概述

2.Template Method解说

3..NET中的Template Method模式

4.适用性及实现要点  阅读全文

posted @ 2006-07-04 18:07 TerryLee 阅读(2678) | 评论 (14)  编辑 |

     摘要: 结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式)。这些结构型模式,它们在某些方面具有很大的相似性,仔细推敲,侧重点却各有不同。本文试图对这几种结构型模式做一个简单的小结。

主要内容

1.结构型模式概述

2.结构型模式区别与比较

3.对变化的封装  阅读全文

posted @ 2006-06-01 08:50 TerryLee 阅读(2121) | 评论 (16)  编辑 |

     摘要: 最近不断的有朋友来Email问一些关于设计模式方面的问题,这更加坚定了我要把设计模式系列文章写完,也有朋友要一些示意性的代码,在我自己学习设计模式的过程中,个人认为http://www.dofactory.com/上面提供的一些例子还是不错的。为了大家学习的方便,我整理制作了这本新版设计模式手册[C#],算是为初学设计模式的朋友提供一点资料,希望能够对这些朋友有所帮助。手册共有150页左右,PDF格式,带有书签。包括了GOF23种经典设计模式,每一个模式都有结构图、生活例子、意图、适用性、示意性代码、实际运用代码等几个方面,多半都来自于网络,其中所有代码都来自于http://www.dofactory.com/。

  阅读全文

posted @ 2006-05-23 08:26 TerryLee 阅读(7821) | 评论 (132)  编辑 |

     摘要: 在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切。这就是本文要说的Proxy模式。

主要内容

1.例说Proxy模式

2.Proxy模式效果及实现要点

……  阅读全文

posted @ 2006-05-18 13:51 TerryLee 阅读(3503) | 评论 (15)  编辑 |

     摘要: 面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作?

本文试图通过一个简单的字符处理的例子,运用重构的手段,一步步带你走进Flyweight模式,在这个过程中我们一同思考、探索、权衡,通过比较而得出好的实现方式,而不是给你最终的一个完美解决方案。

主要内容:

1. Flyweight模式解说

2..NET中的Flyweight模式

3.Flyweight模式的实现要点

……  阅读全文

posted @ 2006-03-29 14:35 TerryLee 阅读(3602) | 评论 (30)  编辑 |

     摘要: 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Façade 模式。  阅读全文

posted @ 2006-03-17 18:39 TerryLee 阅读(4003) | 评论 (10)  编辑 |

     摘要: 组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素。从而使得客户程序与复杂元素的内部结构解耦,让复杂元素自己来实现自身的复杂结构。  阅读全文

posted @ 2006-03-11 14:56 TerryLee 阅读(4321) | 评论 (21)  编辑 |

     摘要: Decorator模式采用对象组合而非继承的手法,实现了在运行时动态的扩展对象功能的能力,而且可以根据需要扩展多个功能,避免了单独使用继承带来的“灵活性差”和“多子类衍生问题”。同时它很好地符合面向对象设计原则中“优先使用对象组合而非继承”和“开放-封闭”原则。
  阅读全文

posted @ 2006-03-01 17:49 TerryLee 阅读(4089) | 评论 (32)  编辑 |

     摘要: 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。  阅读全文

posted @ 2006-02-24 09:06 TerryLee 阅读(4615) | 评论 (40)  编辑 |

     摘要: 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。那么如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?这就是本文要说的Adapter 模式。

  阅读全文

posted @ 2006-02-18 11:57 TerryLee 阅读(5017) | 评论 (19)  编辑 |

     摘要: 创建型模式,就是用来创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何选择使用创建型模式。  阅读全文

posted @ 2006-01-16 15:30 TerryLee 阅读(4385) | 评论 (11)  编辑 |

     摘要: Prototype模式同工厂模式,同样对客户隐藏了对象的创建工作,但是,与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的,达到了“隔离类对象的使用者和具体类型(易变类)之间的耦合关系”的目的。

  阅读全文

posted @ 2006-01-16 09:13 TerryLee 阅读(4961) | 评论 (40)  编辑 |

     摘要: 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的Factory Method模式了。  阅读全文

posted @ 2006-01-04 13:31 TerryLee 阅读(9301) | 评论 (81)  编辑 |

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

本文通过现实生活中的买KFC的例子,用图解的方式来诠释建造者模式。
  阅读全文

posted @ 2005-12-19 09:32 TerryLee 阅读(6247) | 评论 (21)  编辑 |

     摘要: 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?这就是我们要说的抽象工厂模式。

本文力图通过一个通俗易懂的计算工资程序,用一种全新的方式来说明抽象工厂模式。

  阅读全文

posted @ 2005-12-13 09:19 TerryLee 阅读(10435) | 评论 (98)  编辑 |

     摘要: Sigleton设计模式是一个非常有用的机制,可用于在面向对象的应用程序中提供单个访问点。文中通过五种实现方式的比较和一个完整的示例,完成了对Sigleton模式的一个总结和探索。用一句广告词来概括Sigleton模式就是“简约而不简单”。
  阅读全文

posted @ 2005-12-09 09:31 TerryLee 阅读(13605) | 评论 (61)  编辑 |

Full C 设计模式 Archive