摘要:
状态模式:当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时情况,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。 下面举例说明,假设有两种状态需要转换,每请求一次就转换一次状态: 阅读全文
摘要:
抽象工厂模式在工厂方法模式的基础上进行了改进,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 使用抽象工厂模式实现数据库切换例子如下: 首先定义两个对象的接口和它的多个具体的实现 然后定义抽象工厂接口,和具体的工厂,具体的工厂负责创建一系列相关的对象 客户端使用不同的工厂实 阅读全文
摘要:
观察者模式又叫发布-订阅模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。 下面举例天气预报通知,演示观察者模式: 首先定义观察者 下面定义观察目标对象 客户端完成观察者和目标的实例化和绑定 执行结 阅读全文
摘要:
当需要将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,就可以使用建造者模式。 在建造者模式中,用户只需要指定需要建造的类型就可以得到它们,而建造的具体过程和细节是不需要知道的。 下面使用建造小人,举例说明该模式: 首先创建不同的建造者: 然后,定义指挥者,该指挥者定义了建 阅读全文
摘要:
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得子系统更加容易使用。 举例如下: 某个子系统的实现: 外观模式实现: 使用外观类:由于外观类的存在,客户端可以根本不知道子系统的存在,只需使用外观类方法即可 运行结果如下: Method One Method T 阅读全文
摘要:
模板方法模式:定义一个操作中算法的骨架,而将一些步骤延迟到子类中,它使得子类可以不改变算法的结构即可重新定义该算法的某些特定步骤 模板方法模式实现考试答题: 模板模式通过把不变的行为搬移到超类中,从而去除子类中的重复代码,提供了一个很好的代码复用平台。当不变的和可变的行为在方法的子类实现中混合在一起 阅读全文
摘要:
原型模式就是从一个对象再创建另一个可定制的对象,而不需要知道任何创建的细节。 原型模式本身是比较简单的,不过其中牵涉到浅复制和深复制的实现,下面使用.Net自带的方法和接口分别实现浅复制和深复制: MemberwiseClone方法实现的是浅复制,即如果字段是值类型,则对该字段执行逐位复制,如果字段 阅读全文
摘要:
工厂方法模式是对简单工厂模式的改进,它为每个对象增加了一个工厂类,专门用于生成该对象。 工厂方法实现加减乘除例子如下: 1 操作类 2 为每一个操作类添加一个工厂对象 3 在客户端使用工厂生产需要使用的对象 运行结果为:3 工厂方法模式把判断移到了客户端,并没有解决判断实例化哪个对象的问题,但这种模 阅读全文
摘要:
代理模式:为其它对象提供了一种代理,以控制对这个对象的访问 代理在客户端和实际实体之间增加了一层处理,主要有下列几种使用场合1 远程代理,为一个对象在不同的地址空间提供局部代表,隐藏了一个对象存在于不同地址空间的事实,如Web引用2 虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时 阅读全文
摘要:
装饰模式是为已有功能动态的添加更多功能的一种方式。 当系统需要新功能的时候,是向旧的类中添加新的代码,而这些新的代码通常装饰了原有类的核心职责或者主要行为, 这些新的逻辑增加了主类的复杂度,但是它们仅仅是满足一些只在某这特定情况下才会执行的特殊行为的需要,且先后执行顺序不确定。 这样,每个要装饰的功 阅读全文