软件设计之美 -- 设计模式的实践理论

根据peter code的理论,良好的软件设计系统应该是可扩展,够灵活且支持热插拔的.如何做到呢?

答案是可维护重用设计.这个词可以拆开来理解.

系统的可维护性,实际上是指日后对新需求的加入,bug的修改等内容.正所谓维护即再生.

而重用我把它理解为代码级重用,方法级重用,类级重用,以及架构级重用.其中,代码级重用是最低级的重用方式,多表现为程序员的复制粘贴.高级的重用,像类级重用,则表现为合成/聚合以及继承.

可维护与重用是一对既矛盾又关联的课题.解决这个矛盾的过程,其实就是优化重构系统的过程.假如方法A和方法B同时调用方法C,这时用户希望修改C以适应A的新需求,而B则没有这部分需求.这时就突出了这个矛盾.简单的代码级重用的做法是C里面加入if...else,然而这显然不是优秀的解决方案.我们如果把重构的焦点抬高,放到类级上,我们可以为方法C抽象出接口IC,并且A,B都聚合了IC,任凭用户需求日后怎么改变,我们只需要为它增加新的实现即可.这个设计理论满足开闭原则和依赖倒转原则.

通过实现可维护重用设计的系统,显然可以很大程度上提高软件系统的可扩展,灵活以及支持热插拔能力.而指导我们去设计可维护重用的理论分别是开闭原则,里氏代换原则,依赖倒转原则,接口隔离原则,合成/聚合重用原则,笛米特法则.

开闭原则,"open for extention,but close for modification."维护即再生,新需求应该是无限增加的过程,而不是通过修改已有代码的过程.

里氏代换原则,若类A的对象oa在程序P中可以被类B的对象ob全全替代而且P的功能不会受到影响,那么就说明B是A的子类.这条原则是OOD的继承理论的准则.

依赖倒转原则,抽象不依赖实现,实现依赖抽象.极端情况是作为抽象类的A定义了所有成员变量以及方法,而实现子类B只是实现,并不用声明.这条原则是实现开闭原则的捷径.

接口隔离原则,接口可以有两个含义,第一,是interface关键字定义的接口,第二简单说来是指API,可以扩展到系统级接口,如ERP与MES的三四级接口,可以是报文形式或者不同开发语言之间的接壤.而接口隔离原则也有两个含义,第一个,它强调了接口功能的独立性.第二个,它强调了宽窄接口,服务定制的特性.

合成/聚合重用原则,在可以用合成/聚合的时候,不用继承.

笛米特法则,一句话,"不要和陌生人说话",笛米特法则强调类之间的通信尽可能维持在周围"朋友"之间,当然极端的情况会带来系统的通信不方便,所以,适当运用依赖倒转,达到系统通信,性能最优.

在6个设计原则之上,就是23种经典设计模式.设计模式作为设计理论的最佳实践,应该被反复推敲,作为经典记于脑中.


软件设计之美 -- 设计模式的实践理论

 

你可能感兴趣的:(设计模式,C++,c,C#)