设计模式之设计原则(一)

    在对面向对象不断学习的过程中,在原来的基础之上,总会有新的收获,进一步的认识。下面跟大家分享:面向对象设计中的应遵循的三大原则。

单一职责原则(SRP

一、什么是单一职责?

    生活中,我们所使用的手机功能不胜枚举,但是就单一拍摄功能而言,却不敌专业DV。类与之同理,应遵循单一职责原则,也就是尽力使之功能单一,引起其变化的因素单一。 

为要遵循单一职责原则?

    功能间强耦合:一个类中,功能过多,就相当于把这些职责都耦合在一起,导致无论改动哪儿,都需要在类中动手脚,导致改动维护麻烦,代码不可能复用,缺乏灵活性。同时也可能会削弱或者抑制这个类完成其他的功能。这就与为什么四肢发达的手机,在就单一拍摄功能而言,不敌专业DV同理。

开放—封闭原则(OCP

一、什么是开放封闭原则?

    软件实体(类、模块、函数等等)应该对扩展开放,对更改封闭的原则。例如生活中,面对考研的下定狠心同学,这个决定是雷打不动的,即对修改(改变)关闭(closed for modification)。但某些招聘机会,却不得错失,那么我们应保持得态度就该对此机会开放(open for extension)。如此一来,考研求职两不误。在面向对象设计中,这一原则就是开放—封闭原则(OCP)。

二、为什么要遵循单一职责原则?

    在软件设计过程中,需求总在变动。作为设计人员决不能指望一开始,就敲定用户需求。这就考虑到新旧版本间的转换,只需要针对新需求对软件做简单的扩展,而非彻底从头到尾的修改源程序,否则这样的工程量将是巨大的,毁灭性的。

三、注意事项

1、OCP原则应该从软件设计早期开始,设计时便开始时刻考虑。

2、从全局角度看问题,在发生小变化时,便考虑到会否发生长远的变化较大的问题,从而提前采取行动,考虑重构抽象等。

依赖倒转原则(DIP

一、什么事依赖倒转原则?

    我们在设计过程中,常出现这样的情况,高模块直接依赖底层模块进行设计。设想一个问题,如果底层模块出现问题时,我们设计的那么多依赖于此的高模块境地该有多尴尬。例如你电脑内存条坏了,不至于把整个CPU进行修理更换。所以依赖倒转,指的便是高层块不应依赖于低层,两者都应该依赖于抽象。抽象也有讲究,不应依赖与细节,反倒是细节应该依赖与抽象。

    下面让我们来看看应遵循依赖倒转的另一有利证明:

二、里氏代换原则:

1、子类必须能完全替换掉父类才能称之为继承。例如企鹅在编程的世界里,就不属于鸟父类的子类。因为它不具有飞的功能,不能完全替代它的父类。

2、里氏代换使得继承复用成为可能,只有子类可以完全替代父类时,使用子类,软件功能才不会受到影响,而子类也可青出于蓝而胜于蓝。

3、里氏代换使得OCP成为可能。如果子类在不能完全替代父类的情况之下使用,何谈对类的扩展开放,修改关闭。

4、里氏代换与依赖倒转,我们可以逆向思考,如果承认了不会飞的企鹅继承与鸟类,那么在使用企鹅飞方法时,程序必然出错。这也反向证明了当高层模块依赖低层时,程序容易出现的错误。这也是为什么在此提出里氏代换的原因。

三大原则运用于现实生活

                

    编程世界

   VS   

   现实生活   

 SRP

类功能专一,避免强耦合

一专多杂

 OCP

可扩展,不可大幅度修改

下定决心

 DIP

基于抽象,不基于低层

根坚叶繁

1、对于编程世界,单一职责要求类的功能单一,避免类间功能的强耦合。但是现实原则却与之相异,我们除了要有一门专业才能做支撑之外,同时学习能力要像蔓条一样发达,方方面面都提倡多多涉猎了解,让人生更加丰富多彩。

2、开放封闭原则则与现实生活一致,对于雷打不动的目标,都需要下定决心不要轻易进行翻新整修。可以有新的需求是对原来的目标进行扩展,但不可大幅度修改甚至完全推翻既定的目标。否则根基不停的变动,何来高楼大厦一说。

3、对于依赖倒转原则,也可以联系实际,像科研人员做实验,如果偷懒想要依赖于别人的实验结果,那当此结果出现错误或者明显误差的基础之上再利用,则会导致根本性的错误和实验的失败。所以最初依赖的根基一定要结实,对于类而言就是够抽象,足以代表大众,在此之上生长的大树才能欣欣向荣,枝繁叶茂。

评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值