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