随笔分类 -  Design Patterns

摘要:反射工厂是.NET独有的,因为它基于反射机制,可以用来简化工厂类。 public static object CreateByReflection(string strType) { Type t = Type.GetType(strType); ConstructorInfo ci = t.GetConstructo... 阅读全文
posted @ 2007-10-02 00:22 包建强 阅读(669) 评论(0) 推荐(0) 编辑
摘要:这个模式是对简单工厂的更高层次上的抽象,UML图如下: public abstract class AbstractFactory { public abstract AbstractProductA CreateProductA(); public abstract AbstractProductB CreateProductB(); ... 阅读全文
posted @ 2007-10-02 00:21 包建强 阅读(800) 评论(1) 推荐(0) 编辑
摘要:工厂方法模式,就是使一个类的实例化延迟到子类——惰性声明 UML图如下: public class Production { } public abstract class Creator { public abstract Production FactoryMathod(); } public class ConcreteCrea... 阅读全文
posted @ 2007-10-02 00:20 包建强 阅读(1358) 评论(3) 推荐(0) 编辑
摘要:1)现实中,如果我家的电脑坏了,我就去找电脑维修工来你家来修,这个人会在知道我家这个对象,然后来我家让电脑重装系统;当然若你家的电脑坏了,也会找这个维修工来修理,但可能是换硬盘。这就是访问者模式。电脑维修工是ConcreteVisitorA,你家是ConcreteElementA。UML图如下: 怎么在客户端使用呢? 电脑维修工 v1 = new 电脑维修工... 阅读全文
posted @ 2007-04-17 22:14 包建强 阅读(798) 评论(2) 推荐(0) 编辑
摘要:我很喜欢这个模式,因为它解决了对象赋值的问题。尤其是那个Clone方法,记忆犹新。 使用场景:当一个系统应该独立于产品的创建,构成和表示时,使用设计模式。 .NET提供了ICloneable接口,只要实现了其Clone方法,在其中执行复制对象的操作。关键就是这个Clone方法,由于对象的复杂性,分为浅复制 和深复制两种: 对于浅复制,可以使用Object的MembermiseClone方法:... 阅读全文
posted @ 2007-04-16 23:17 包建强 阅读(791) 评论(0) 推荐(0) 编辑
摘要:看这一节的时候,建议读者同时参考上一节——注册工厂。 Flyweight是个好东西,我用过两次,都是在C/S程序中画画。在台资公司那次,是跟新来的云大Master赌气时做的,我用了3个享元就模拟了240台机器,而他则挪了240个Button在上面,我用一个晚上时间为我的母校捍卫了荣誉,然后毅然离职,以证明Boss的有眼无珠。爽啊!另一次,是我在家里闷头写一套开源项目,在线游戏大厅,在打牌的时候实现... 阅读全文
posted @ 2007-04-16 23:11 包建强 阅读(557) 评论(0) 推荐(0) 编辑
摘要:这一节不讲模式,讲注册工厂,是为了下一节研究Flyweight做准备。 注册工厂,就是建立一个小型“DB”,采用注册方式,对实例进行管理。 从实现上有两种方式,但本质是相同的,都是在管理一组对象。 为了讲述方便,先建立一组父子类,Subject是ConcreteSubject1和ConcreteSubject2的父类。 public class Subject { ... 阅读全文
posted @ 2007-04-12 22:03 包建强 阅读(1400) 评论(2) 推荐(0) 编辑
摘要:Singleton的出现,取代了C++中全局变量——这个破坏OO封装性的概念。 使用场所:控制Socket通信,写日志,简单工厂。 实现Singleton的三个要点 1.私有化构造函数 2.保存实例的静态私有变量 3.访问这个实例的公共静态方法 实现如下: public class CSingleton { private static CSingleton myS... 阅读全文
posted @ 2007-04-11 21:28 包建强 阅读(684) 评论(0) 推荐(0) 编辑
摘要:一般想起Undo,都会想起Memento模式和Command模式,今天先说前者。Memento模式最形象的例子是,把大脑的记忆一条条写在Blog上,其中大脑是Originator,每一条记忆信息是Memento,这条信息可以很复杂,于是可以独自作为一个类对象State,Blog这个载体就是CareTaker,负责添加与删除记忆信息。Memento模式UML图如下:Memento(备忘录):保存Or... 阅读全文
posted @ 2007-04-10 23:03 包建强 阅读(2093) 评论(7) 推荐(0) 编辑
摘要:但凡是模式,总要有一个UML才能说清楚。一般而言,我只记UML图,有些模式有自己的固定实现代码(只是其中一部分),尤其在C#中,甚至只是把用户当作一个Client端,而不暴露其内部实现,只把封装好的模式接口公布。于是,我会再记一些固定方法实现。还有就是适用场合(多看例子),优缺点。最后,横向的看模式与模式之间的比较,联合与差异。以上都做到了,这套心法也就成正果了。 OO的思想也很重要,三个基本特... 阅读全文
posted @ 2007-04-10 17:12 包建强 阅读(1244) 评论(0) 推荐(1) 编辑
摘要:这个也说模式,那个也说模式,老实说,没有一个把全部23个都讲明白的,除了GOF,毕竟人家是合写,每人写他最拿手的几个,所以人家那本书成功了;至于其他人,大多是只精通其中几个,于是就出书了,他那些不熟的模式就到网上抄一抄人家的,抄得好还可以,至少读者能看懂,抄得不好——不说了,跑题了。 最近在公司和老虎还有Will每周讨论几个模式,他俩是做c++的,我是做c#的,差别很多,但是在对模式的认识上,只要... 阅读全文
posted @ 2007-04-04 20:09 包建强 阅读(910) 评论(1) 推荐(0) 编辑