首页 > 其他 > 详细

设计模式(01-概述)

时间:2014-03-11 13:18:22      阅读:364      评论:0      收藏:0      [点我收藏+]

在面向对象的学习过程中,设计模式是一项很重要的学习内容,那么什么是设计模式呢?

“设计模式描述了在我们周围不断重复发生的问题,以及解决该问题的核心。”一位建筑师 Christopher Alexander 这么说道。

在软件设计中,设计模式描述了一类常见问题的一般性解决方案。经典书籍《设计模式:可复用面向对象软件的基础》中描述了23种核心的设计模式,创立了模式在软件设计中的地位。

面向对象设计模式是“好的面向对象设计”,即可以满足“应对变化,提高用的设计”。设计模式是经验性的总结和归纳,不能生搬硬套,需要结合具体的项目,细致的分析需求的变化点,针对相应的变化点来选择相应的一个或者多个设计模式来解决问题。如果要学好面向对象设计模式,需要扎实的面向对象的知识。

在各种面向对象的编程语言中,语言机制各有差别,但是都具有面向的三大特征:封装(隐藏内部实现),继承(复用现有代码),多态(改写对象行为)。面向对象语言只是为了让使用者更方便的使用面向对象的机制,不能说学会了一门面向对象的语言(C#、java)就说自己学会了面向对象。所以我们需要单独的学习面向对象的概念,并理解面向对象的设计原则。

下面是一些重要的面向对象的原则:

1. 针对接口编程,而不是针对实现编程。客户只需要知道他能够做些什么事情以及做这些事情的效果,而无需知道怎么去做这些事情。

2. 优先使用对象,而不是类的继承。继承在某种程度上破坏了封装的原则,子类和父类之间的耦合性太高。

3. 封装变化点。使用封装来创建对象之间的分界层,设计者可以在分界层的一侧进行修改,而不会对另一个产生影响。

上述三条是设计模式中比较核心的设计原则,除了这些还有一下比较具体的原则:

单一职责原则(SRP):一个类应该仅有一个引起它变化的原因。

开放封闭原则(OCP):对扩展开发,对修改关闭。

Liskov替换原则(LSP):子类必须能够替换他们的基类。

倚赖倒置原则(DIP):高层模块不应该倚赖底层模块,二者都应该倚赖于抽象。抽象不应该倚赖于实现细节,实现细节应该倚赖于抽象。

接口隔离原则(ISP):不应该强迫客户程序倚赖于它不同的用法。

在敏捷软件开发中,提出了“使用重构得到模式”是目前公认的最好使用设计模式的方法。

在经典著作《设计模式:可复用面向对象软件的基础》中,四位作者将设计模式划分为三组:

目的 设计模式 可变的方面
创建 抽象工厂(Abstract Factory)
生成器(Builder)
工厂方法(Factory Method)
原型(Prototype)
单件(Singleton)
产品对象家族
如何创建一个组合对象
被实例化的子类
被实例化的类
一个类的唯一实例
结构型 适配器(Adapter)
桥接(Bridge)
组成(Composite)
装饰(Decorator)
外观(Facade)
亨元(Flyweight)
对象的接口
对象的实现
一个对象的结构和组成
对象的职责,不生成子类
对象的存储开销
如何访问一个对象,该对象的位置
行为模式 职责链(chain of responsibility)
命令(command)
解释器(interpreter)
迭代器(iterator)
中介者(mediator)
备忘录(memento)
观察者(observer)
状态(state)
策略(strategy)
模版方法(template method)
访问者(visitor)
满足一个请求的对象
何时、怎样满足一个请求
一个语言的文法及解释
如何遍历、访问一个聚合的各元素
对象间怎样交互,和谁交互
一个对象中哪些私有信息存放在该对象之外,以及在什么时候进行存储
多个对象依赖于另外一个对象,而这些对象又如何保持一致
对象的状态
算法
算法中的某些步骤
某些可作用于一个(组)对象上的操作,但不修改这些对象的类

设计模式(01-概述),布布扣,bubuko.com

设计模式(01-概述)

原文:http://www.cnblogs.com/hanzejl/p/3589551.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!