设计模式(二)----四大原则

原则一:单一职责原则(SRP),就一个类而言,应该引用一个引起它变换的原因。具体就是尽量简化类的方法。通俗的说,即一个类只负责一项职责。

具体可见:http://blog.csdn.net/zhengzhb/article/details/7278174这的讲解非常详细。

原则二:开放-封闭原则,是说软件实体(类/模块/函数等等),应该可以扩展,但是不可修改。

         对于程序设计而言,怎么的设计才能面对需求的改变却可以保持相对的稳定,从而可以使得系统可以再第一个版本的基础上不断的推出新版本呢?

          答案是应用该原则。

           既然,需求不可能不变,并且设计也不可能考虑那么全面。但是我们要尽量保证类设计的很好,当新功能来了,只需要增加类,而不是要修改类。但是并不能预先知道哪些功能是可以被隔离的,但是我们尽量做到封闭-开放。

       如果在最开始的时候,设计的类,需要发生变化,增加一个功能,则在这里需要考虑重构原来的代码,隔离也就是创建抽象。

       比如,设计了一个加法算法,当来了一个需求是要减法时,我们就考虑设计一个继承了。

       开放封闭原则是面向对象的核心所在,遵循这个原则可以带来面向对象所谓的巨大好处,也就是可维护,可扩展,可复用,灵活性好。然而,对于应用程序中的每个部分都刻意的抽象同样不是一个i好主意,拒绝不成熟的抽象和抽象一样重要。

原则三:依赖到转原则

        这个原则看了一边大话设计模式后感觉有些云里雾里的。抛开书就只还记得一个实例,为什么我们会修电脑这么复杂的东西,而不会修收音机这个相对简单的东西呢?原因可能是intel这些公司在设计电脑的时候是“针对接口编程的,而不是针对实现编程”。内存坏了,我们只要拔下来换一块就好了,硬盘不够了,只需要插一个移动硬盘就ok。
     这里用到一个原则------里氏代换原则。说白了,就是一个软件实体如果需要一个父类的话,那么一定适用于其子类,而它觉察不出父类对象和子类对象的区别。    即,子类型必须能够替换掉他们的父类型。
     书上举了个例子,即企鹅不能继承鸟类,因为企鹅不会飞,而鸟会飞。
     正是由于子类型的可替换性才使得使用父类型的模块在无需修改的情况下就可以扩展。  
定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。

解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。

原则四:迪米特法则

定义:一个对象应该对其他对象保持最少的了解。

问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。

解决方案:尽量降低类与类之间的耦合。

         自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚。无论是面向过程编程还是面向对象编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率。低耦合的优点不言而喻,但是怎么样编程才能做到低耦合呢?那正是迪米特法则要去完成的。

         迪米特法则又叫最少知道原则,最早是在1987年由美国Northeastern University的Ian Holland提出。通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。迪米特法则还有一个更简单的定义:只与直接的朋友通信。首先来解释一下什么是直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。

来自: http://blog.csdn.net/zhengzhb/article/details/7296930

总结下这四个原则吧。
  1.类的功能尽量单一,不要太多功能。(防止方法1变了,影响方法2的功能。)
  2.设计类时,考虑到新功能增加后,不虚改现有的类,而是增加类,重构抽象和继承,来完成功能。(防止版本更新,修改工作巨大)
  3.继承时,父类的方法完全是子类的方法,而子类的方法全部继承于父类,这样父类则相当于接口,降低了,子类与其他类间的耦合。(调用时,只调用父类)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值