设计模式 设计原则

 

Head First中的设计原则总结:

一、封装变化
二、多用组合,少用继承
三、针对接口编程,不针对实现编程
四、为交互对象之间的松耦合设计而努力
五、类应该对扩展开放,对修改关闭
六、依赖抽象,不要依赖具体类
七、只和朋友交谈
八、别找我,我会找你
九、类应该只有一个改变的理由

 

-闭原则(open-closed principleOCP)

所谓开-闭原则:就是在设计模块时,应当使这个模块可以在不被修改的前提下被扩展,也就是说对扩展开放,对修改关闭

那么如何实现开-闭原则呢?

方法是:

1、抽象,在JAVA里以接口或者是抽象类实现

2、对可变性进行封装,也就是说将散落在各个角落的可变的代码封装到一个对象里,然后使用继承来实现同一种可变性的不同表象,继承应当被看成是封装变化的方法,而不应当被认为是从一般对象生成特殊对象的方法,其次,一种可变性不应当与另一种可变性混合在一起,一般继承结构不宜超过两层

 

里氏代换原则(Liskov substitution principle LSP

所谓里氏代换原则是:任何基类出现的地方,子类一定可以出现。该原则是开闭原则的补充,实现开闭原则的关键步骤是抽象化。而基类与子类的继承关系就是抽象化的具体体现,所以里氏代换原则是实现对抽象化的具体步骤的规范,一般来说,违反里氏代换原则,一定违反开闭原则,反之,不成立

 

依赖倒转原则(Dependency Inversion principleDIP

简单地讲所谓依赖倒转原则就是针对接口编程,而不是针对实现编程。

这里讲一下面向对象中两个类发生的三种不同的耦合关系:

l         零耦合:就是两个类没有耦合关系

l         具体耦合:就是发生在两个具体类之间,经由一个类对另一个类的直接引用造成的

l         抽象耦合:就是一个具体类和一个抽象类之间的关系

 

接口隔离原则(Interface Segregation PrincipleISP

前面讲了依赖倒转原则是针对接口编程,在针对接口编程时,需要注意的是使用多个专门的接口比使用一个单一的大接口要好。如何理解呢?

比如,把人早上睡醒后的一系列动作设计为一个大接口的话,该接口可能包含叠被子、刷牙、洗脸、洗澡、上厕所,吃早饭这些方法,那么这一接口被一动物继承是否合适呢?我认为不太合适,因为动物可能不需要叠被子、刷牙、洗脸,而只需要上厕所,吃早饭。如果动物继承了这一个大接口,那么就不得不实现叠被子、刷牙、洗脸成空方法。那么是否可以将叠被子、刷牙、洗脸设计为一接口,把叠被子、刷牙、洗脸设计为另一接口呢?这就是接口隔离原则

 

合成/聚合复用原则(Composition/Aggregation PrincipleCARP

合成/聚合复用原则简单地讲就是要尽量使用合成/聚合,尽量不使用继承

 

迪米特法则(Law of DemeterLoD

所谓迪米特法则就是

l         只与你直接的朋友通信

l         不要与陌生人说话

l         每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与单位密切相关的软件单位

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值