摘要:
原型模式(Prototype),用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象[DP]。“原型模式其实就是从一个对象再创建另外一个可定制的对象,而不需要知道任何创建的细节。”基础知识this.MemberwiseClone(),MSDN解释:创建对象的浅表副本。方法是创建一个新的对象,然后将该对象的非静态字段复制到该新对象。如果字段是值类型,则对字段执行逐位复制。如果对象是引用类型则复制引用而不复制引用的对象;因此原始对象和副本引用一个对象。在.NET在System命名空间提供了ICloneable接口,其中的唯一一个方法Clone()这样只需实现这个接口就可以完成原型模型了。 阅读全文
摘要:
简单工厂vs工厂方法简单工厂是第二章讲解的内容,它与工厂方法很相似。简单工厂模式最大的优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类,对客户来说去除了对具体产品的依赖。但是,每次要添加算法,都需要的在客户端怎加一个case分支条件,修改了原有的类,违反了开放-封闭原则。简单工厂模式复习:Pattern.Sample Factory.Code 1 namespace Pattern.FactoryMethod 2 { 3 //首先复习简单工厂 4 class OperationFactory 5 { 6 public stati... 阅读全文
摘要:
代理模式(Prexy)为其他对象提供一种代理以控制这个对象的访问[DP]。代理模式代码代码比较简单,但是应用场景难于理解。代理模式菜鸟设计应用:Proxy.Newbie.Code 1 namespace Pattern.Proxy.Newbie 2 { 3 interface IGiveGift 4 { 5 void GiveDolls(); 6 void GiveFlowers(); 7 void GiveChocolate(); 8 } 9 10 class Proxy : IGiveGift11 {1... 阅读全文
摘要:
装饰模式(Decorator),动态给一些对象添加额外的职责,就增加功能而言,装饰模式比声明子类更加灵活[DP]。装饰模式使用: 利用SetComponent来对对象进行包装的,这样每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中的[DEP]。装饰模式的原型实现:Pattern.Decorator.Prototype.Code 1 namespace Pattern.Decorator 2 { 3 abstract class Component 4 { 5 public abstract void... 阅读全文
摘要:
依赖倒转原则,A.高层模块不应该依赖低层模块,两者都应该依赖抽象。B.抽象不应该依赖细节,细节应该依赖抽象。(平常高层模块调用,低层已经开发好的函数库,但是比如,客户要求换了数据库的存储方式,依赖低层函数就不行了,如果我们依赖了抽象类或者借口,就不用怕了。)里氏替换原则(LSP),子类必须能够替换掉他们的父类[ASD]。里氏替换原则由Barbara Liskov女士在1988年发表;一个软件实体如果使用的是父类的话,那么一定适用于其子类,而且觉察不到父类对象与子类对象的差别。也就是说,在软件类面,把父类替换为子类,程序的行为没有发生变化。正是因为这个原则,使得继承复用成为可能。只有当子类可以替 阅读全文
摘要:
开放-封闭原则,就是说软件实体(类、模块、函数等)应该可以被扩展,但是不可修改。'对于扩展是开放度(Openforextension)','对于更改是封闭的(Closefor Modification)'.怎样设计才能面对需求的改变却可以保持相对稳定,从而使得系统在第一个版本出来以后不断推出新的版本?如何应变?无论模块怎么‘封闭’,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对那种变化封闭做出选择。他必须猜出最有可能发证变化的种类,然后构建抽象来隔离那些变化。等到发生变化时立即采取行动[ASD]在我们最初编写代码时,假设变 阅读全文
摘要:
单一职责原则(SRP),就一个类而言,应该只有一个引起它变换的原因。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离[ASD]。如果你能有多于一个的动机去改变一个类,那么这个类就有多于一个的职责[ASD]。 阅读全文