步步为营 .NET 设计模式学习笔记系列总结
spring yang
设计模式原则
使用设计模式的根本原因是适用变化,提高代码复用率,使软件更具有可维护性和可扩展性。需要遵循以下几个原则:单一职责原色、开放封闭原则(Open Closed Principal)、依赖倒置原则、里氏代换原则。
1.单一职责原则
就一个类而言,应该只有一个引起他变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破会。
2.开放封闭原则
软件实体(类、模块、函数等)应该可以扩展,但不可以修改。也就是说对扩展是开放的,对修改是封闭的。一般来说,面对需求,对程序的改动是通过添加新代码进行的,而不是更改现有代码。
3.依赖倒置原则
抽象不应该以来细节,细节应该依赖抽象,也就是提倡的“面对接口编程,而不是面对实现编程”。也可以这样理解:高层模块不应该依赖底层模块,两个都应该抽象;抽象不应该依赖细节,细节应该依赖抽象。
4.里氏代换原则
子类必须能够替换掉他们的父类型。也就是说,在软件开发过程中,子类替换掉父类,程序的功能行为没有变化。只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也可以在父类的基础上增加新的行为。
三种设计模型
创建型模式
1.Singleton模式解决的是实体对象个数的问题。除了Singleton之外,其他创建型模式解决的都是new所带来的耦合关系。
2.Factory Method、Abstract Factory、Builder都需要一个额外的工厂类来负责实例化“易变对象”,而Prototype则是通过原型(一个特殊的工厂类)来克隆“易变对象”。
3.如果遇到“易变类”,起初的设计是从FactoryMethod开始,当遇到更多的复杂变化时,再考虑重构为其他三种工厂模式(Abstract Factory,Builder , Prototype )。结构型模式
1.Adapter模式注重转换接口,将不吻合的接口适配对接
2.Bridge模式注重分离接口与其实现,支持易做图度变化
3.Composite模式注重统一接口,将“一对多”的关系转化为“一对一”的关系
4.Decorator模式注重稳定接口,在此前提下为对象扩展功能
5.Facade模式注重简化接口,简化组件系统与外部客户程序的依赖关系
6.Flyweight 模式注重保留接口,在内部使用共享技术对对象存储进行优化
7.Proxy 模式注重假借接口,增加间接层来实现灵活控制行为型模式
1.Template Method模式封装算法结构,支持算法子步骤变化
2.Strategy模式注重封装算法,支持算法的变化
3.State模式注重封装与状态相关的行为,支持状态的变化
4.Memento模式注重封装对象状态变化,支持状态保存/恢复
5.Mediator模式注重封装对象间的交互,支持对象交互的变化6.Chain Of Responsibility模式注重封装对象责任,支持责任的变化
7.Command模式注重将请求封装为对象,支持请求的变化
8.Iterator 模式注重封装集合对象内部结构,支持集合的变化
9.Interpreter模式注重封装特定领域变化,支持领域问题的频繁变化
10.Observer模式注重封装对象通知,支持通信对象的变化
11.Visitor模式注重封装对象操作变化,支持在运行时为类层次结构动态添加新的操作。设计模式应用总结:
1.设计模式建立在对象对系统变化点的基础上进行,哪里有变化点,哪里应用设计模式。
2.设计模式应该以演化的方式来获得,系统的变化点往往是经过不断演化才能精确定位。
3.不能为了模式而模式,设计模式是一种软件设计的软力量,而非规标准,不应夸大设计模式的作用。
各种模式比较
设计模式 |
常用程度 |
适用层次 |
引入时机 |
结构复杂度 |
Abstract Factory |
比较常用 |
应用级 |
设计时 |
比较复杂 |
Builder |
一般 |
代码级 |
编码时 |
一般 |
Factory Method |
很常用 |
代码级 |
编码时 |
简单 |
Prototype |
不太常用 |
应用级 |
编码时、重构时 |
比较简单 |
Singleton |
很常用 |
代码级、应用级 |
设计时、编码时 |
简单 |
Adapter |
一般 |
代码级 |
重构时 |
一般 |
Bridge |
一般 |
代码级 |
设计时、编码时 |
一般 |
Composite |
比较常用 |
代码级 |
编码时、重构时 |
比较复杂 |
Decorator |
一般 |
代码级 |
重构时 |
比较复杂 |
Facade |
很常用 |
应用级、构架级 |
设计时、编码时 |
简单 |
Flyweight |
不太常用 |
代码级、应用级 |
设计时 |
一般 |
Proxy |
比较常用 |
应用级、构架级 |
设计时、编码时 |
简单 |
Chain of Resp. |
不太常用 |
应用级、构架级 |
设计时、编码时 |
比较复杂 |
Command |
比较常用 |
应用级 |
设计时、编码时 |
比较简单 |
Interpreter |
不太常用 |
应用级 |
设计时 |
比较复杂 |
Iterator |
一般 |
代码级、应用级 |
编码时、重构时 |
比较简单 |
Mediator |
一般 |
应用级、构架级 |
编码时、重 补充:Web开发 , ASP.Net , 上一个:.net集合类的研究-Hashtable,Dictionary<TKey,TValue>
访问www.zzzyk.com 试试 CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络, |