道不远人,深入.net底层技术
业精于勤荒于嬉,行成于思毁于随!
 

3.1 软件设计的目标

1)可扩展性

2)可修改性

3)可替换性

 

3.2 “开-闭”原则

“开-闭”原则指软件实体应当对扩展开放,对修改关闭。即软件实体应该在不修改的前提下进行扩展,这个原则为软件设计指明了目标。

 

3.3 实现“开-闭”原则

 

3.3.1 面向接口编程

优势:

1)降低程序各部分间的耦合性,使程序模块互换成为可能。

2)使软件各部分便于单元测试,通过编制与接口一致的模拟类(Mock),可以很容易地实现软件各部分的单元测试。

3)易于实现软件模块的互换,软件升级时可以只部署发生变化的部分,而不会影响到其他部分。

 

3.3.2 封装变化

程序中任何可能发生变化的部分都可以封装为对象,包括命令、事件、属性、算法和状态等。封装变化是实现“开-闭”原则的重要手段,也是设计中发现对象的重要途径。

封装可能发生变化的部分,将可能发生变化作为对象。

 

3.3.3 采用组合替代继承

采用组合代替继承是在需要复用的前提下,并不是所有的继承都可以用组合替代。

 

3.4   面向对象软件设计的难点

最难的部分是:如何发现对象和在对象间进行组合。

 

3.5 设计模式解决的问题

3.5.1 通过显示指定类创建对象(不好的)

如果需求变化,可能要创建不同的对象,因此在实例化时间接创建对象,与这类相关的设计模式有抽象工厂模式、工厂方法模式和原型模式。

3.5.2 紧耦合

紧耦合的类难以复用和维护,修改或删除一个类,必须修改与之相关联的类。

3.5.3 通过生成子类扩展功能

通过子类扩展功能会有很多问题,会引起子类数量增加和类层次的增加。

通过对象组合技术实现功能扩展是很好的选择。

这方面的相关模式有桥接模式、职责链模式、组合模式、装饰模式、观察者模式和策略模式等。

3.5.4 对对象表示或实现的依赖

对象之间有依赖

相关的设计模式有抽象工厂模式、桥接模式、备忘录模式和代理模式等

3.5.5 不能方便的修改类

相关的设计模式有适配器模式、装饰模式和访问者模式等。

3.5.6 对算法的依赖

算法实现的目的是不变的,但是算法本身却不是一成不变的。如果需求变化或功能扩展或软件优化,则可能要修改算法

与此相关的设计模式有生成器模式、迭代子模式、策略模式、模板方法模式和访问者模式。

3.5.7 对软件环境的依赖

希望屏蔽对运行环境的依赖,以确保可移植和可维护性。

与此相关的设计模式有抽象工厂模式和桥接模式等。

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2008-10-05 23:47  扬帆起航  阅读(611)  评论(0编辑  收藏  举报