李珍宝的blog

李珍宝的BLOG

  IT博客 :: 首页 :: 联系 :: 聚合  :: 管理
  51 Posts :: 1 Stories :: 160 Comments :: 0 Trackbacks

软件开发过程中的视角
概念     软件要负责的是什么
规约     怎么使用软件
实现     软件怎样履行自己的职责

设计模式要求从高层次视角考虑问题。


功能分解模块化 会带来低内聚,紧耦合,难以修改维护
不能将责任集中,要分散到各个应该为其负责的类
设计模式书中对设计的建议:
1按接口编程
2尽量用聚合代替继承
3找出变化并封装起来

Facade 用于简化接口
Adapter 用于匹配已有接口


传统模式下的对象:对象包装数据,提供方法
设计模式下的对象:对象是具有责任的实体

传统模式下的封装:用于隐藏数据
设计模式下的封装:用于隐藏一切

传统模式下的继承:用于特化和复用
设计模式下的继承:将类按相同行为分类

找到变化的地点:共性分析
找出如何变化:变性分析


敏捷编程方法关注以下品质 1无冗余 2可读 3可测试

关注可测试性可以帮助程序强内聚、松耦合。

某个规则只在一个地方实现

Strategy 对算法或规则进行抽象
Bridge 将抽象和实现分离,使其独立变化
Abstract Factory 用于创建一系列相关类。使类的使用者与类的创建过程解藕。

从部分构造整体,不可能得到优美的设计。
设计是一些列复杂化的活动,结构是通过对整理操作、使其起皱而注入其中的,而不是通过一小部分一小部分添加而成,在分化的过程中,整体孕育了部分,整体的形式及其各个部分是同时产生的。分化的过程好像是胚胎的成长过程。
开始用最简单的术语来考虑问题(概念性层次),然后添加更多的特性,在此过程中设计将越来越复杂,因为我们加入了越来越多的信息。

高层模式为其他模式建立背景。

开闭原则:对扩展开放,对修改封闭。

尽量用接口,少用抽象类。

依赖倒置原则
高层模块不应该依赖于低层模块,高层模块和低层模块都应该依赖于抽象。
抽象不依赖于细节,细节应该依赖于抽象。

使用对象和被使用对象之间只能在概念层次存在耦合,而非实现层次。

一个从基类派生的类应该支持基类的所有行为。

设计模式有助于看到什么地方可能出现变化,而不是会出现哪个具体的变化。

不让一个类封装两种变化,除非这些变化明确地耦合在一起。

采用共性和可变性分析,有助于解决问题。

客户经常用“总是”表达“通常”,用“从不”表达“很少”

分析矩阵可以辅助分析复杂的问题。


Decorator 把一系列对象串成一个链,依次执行。
Observer 订阅通知。
Template Method 将共同的部分实现,将不同的部分留给子类完成。

对象应该要么构造和/或管理其他对象,要么使用对象,而不应该兼而有之。

Singleton 确保某个类只有一个对象被实例化,用于单线程
Double-Checked Locking 确保某个类只有一个对象被实例化,用于多线程

有状态的Singleton应该谨慎使用,因为这样的全局数据可能会使系统的不同部分耦合。

Object Pool 创建并管理多个资源。
Factory Method 使一个类的实例化延迟到其子类。

模式不是最重要的,模式背后的理念和原则才是最重要的。

 

posted on 2007-09-11 17:05 李珍宝 阅读(629) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。