随笔分类 - 设计模式
摘要:1、迪米特法则(Demeter Principle): 理解:最少知道原则。类之间要尽量减少关联,降低类之间的耦合性。如需要关联,可通过中介类来转达。 实现:外观(Facade)、中介(Mediator) 2、开放-封闭原则(): 理解:对系统添加新的功能时不能影响到原有的功能。 实现:a、多使用抽
阅读全文
摘要:理解:当对象有多个状态时,把每个状态的行为写到各自的状态类里面去,当切换状态时,调用的行为也就自动切换了。 和策略模式很像,不过策略是针对外部的,而状态是针对内部的 代码: 客户端代码: { DesignMode.State.OperatingSystem os = new Windows(); C
阅读全文
摘要:理解:建立一个工厂类,并在工厂类中通过switch 语句来决定返回何种子类的实例 代码: 客户端代码: private void btn_SimpleFactory_Click(object sender, EventArgs e) { Goods goods = SimplyFactory.Cre
阅读全文
摘要:理解:为每种商品建立一个工厂,这样如果要加新的商品,就不用去改以前的工厂类代码. 代码: using System.Collections.Generic; using System.Text;using System.Windows.Forms;namespace DesignMode.Facto
阅读全文
摘要:理解:当有几套不同的方案需要随时切换时,可以使用该模式,比如一个手机里面的软件,当从一个操作系统切换到另一个操作系统,不需要去改每一个软件,只需要改创建所有软件的那个工厂就行了。 代码: 客户端代码:
阅读全文
摘要:理解:订阅-发布。把所有需要通知的对象添加到发布者类里面。发布者更改自己状态后通知观察者 代码: 客户端代码:
阅读全文
摘要:理解:整体与部分的层次关系,且树形关系中的所有对象都有相同的操作 代码: 客户端代码:
阅读全文
摘要:理解:有大量相同类型对象需要创造出来时,可以一种类型只保存一个实例,可以改它的外部状态(如位置,名称等) 代码: 客户端代码: private void btn_Flyweight_Click(object sender, EventArgs e) { ChessmanFactory factory
阅读全文
摘要:理解:元素是固定的,作用于元素的状态是可以变化的。就好比一日三餐(元素)是固定的,但是每一餐吃的食物(状态)又是可以不断变化的。 代码: 客户端代码: private void btn_Visitor_Click(object sender, EventArgs e) { Noodle noodle
阅读全文
摘要:理解:构建一个产品的步骤是稳定的,但是每个产品因为每一步的不同而产生出不同形状。比如台球的一次击打过程就是一个产品,产品的过程包括“瞄准--运杆--出杆”三个步骤。虽然我和丁俊晖都要执行这三个步骤,但是每一步小丁做得都比我好,所以小丁的这次击打肯定就比我的好。 代码: 客户端代码:
阅读全文
摘要:理解:旧的接口不能被客户直接调用,需要第三方类进行转换。就好像USB转换器一样 代码: 客户端代码:
阅读全文
摘要:理解:当有两个变化点在同时变化时使用该模式,例如("人"<中国人、美国人、日本人> 驾驶 "车"<自行车、汽车、火车>) 代码: 客户端代码:
阅读全文
摘要:理解:当一件事情需要一级一级地处理时,并且每一级都有指定的下一级来处理,就好像工厂里面一个员工要请假,会先把请假条拿给领班,领班看能否处理,不能再传给主管,主管如果也不能处理再传给经理,经理不能处理再往上传。 代码:一个数据报文在路由之间传递实例 客户端代码:
阅读全文
摘要:理解:通过一个中介类,把所有对象都关联中介类,对象间要相互联系时,实际上是通过中介联系,这样对象间仍然是低耦合。 代码: using System.Windows.Forms;namespace DesignMode.Mediator{ //抽象中介类 public abstract class C
阅读全文
摘要:理解:当一件事件(基类),在不同的时间或者不同的地点需要不同的策略时,考虑用该模式,好处就是修改或者添加某个子策略时不会影响其它子策略,也不用去修改客户端 代码: using System.Windows.Forms;namespace DesignMode.Strategy{ //4S手机抽象类
阅读全文
摘要:理解:通过在类中定义一个Clone方法克隆自己,分为深COPY 和 浅COPY; 现在NET中,继承了ICloneable接口的类都可以重写Clone()方法。 代码: //原型类 [Serializable] public abstract class PrototypeClass { publi
阅读全文
摘要:理解:把每个命令封装成一个类,当发令者要发布多个命令时,可以一个个排队地发布给接收者,同时记录下每个命令的详细信息,发布时间等。还可以撤销已发布的命令。 代码: using System.Collections.Generic;using System.Windows.Forms;namespace
阅读全文
摘要:理解:当父类中有一个复杂主方法,主方法中大部分不变,只有小部分随子类变化时,把变化点提取出来成新的抽象子方法,让不同的子类去实现不同的子方法。这样主方法不变的部分就可以达到代码复用功能。 代码: using System.Windows.Forms;namespace DesignMode.Temp
阅读全文
摘要:理解:建立一个代理对象,封装真实对象的方法。然后通过访问代理对象来访问一个真实对象。 代码: using System.Windows.Forms;namespace DesignMode.Proxy{ //公共接口,代理类,实际类都要继承 public interface IAccessInter
阅读全文
摘要:作用:针对已经有固定功能的类,想要添加新的小功能或者属性,把这些小功能或者属性放到装饰类里,客户端可以动态地选择用哪些装饰类去修饰原有的类。代码如下: } 客户端代码: }
阅读全文

浙公网安备 33010602011771号