设计模式的6个原则

想象下我们在盖房子,那么这些原则就相当于solid(固定的)地基。

solid都是哪些?

Single Responsibility Principle:单一职责原则

Open Closed Principle:开闭原则

Liskov Substitution Principle:里氏替换原则

Law of Demeter:迪米特法则

Interface Segregation Principle:接口隔离原则

Dependence Inversion Principle:依赖倒置原则

单一职责原则

他的定义如下

A class or module should have a single reponsibility

翻译过来就是:一个类或者模块只负责完成一个职责(或者功能)。

 

举例子:

1、一间屋子,可以做厨房,也可以睡觉,又可以当书房,给一间屋子赋3个功能,虽然也可以,但是屋子小,功能多,特别的麻烦,没有空间,不如书房,厨房,卧室都分开,单一职责,低耦合,高内聚,效率高。

2、一个类里既包含订单的一些操作,又包含用户的一些操作。而订单和用户是两个独立的业务领域模型,我们将两个不相干的功能放到同一个类中, 那就违反了单一职责原则。

需要拆分成两个粒度更细、功能更加单一的两个类:订单类和用户类。

3、用户信息中的地址信息的设计包括省市区县等详细位置,这个看业务来区分,如果公司的未来可能有这方面的业务,那么留下可扩展的设计,以便以后的开发,如果没有也不碍事。

 

类的设计原则:

属性方法少设计,单一简单挺好的。  树死叶凋(属私业低)

私有属性看一看,复用高效public

业务一定要清晰,否则就会乱乱的。

低耦合高内聚要做到,依赖过多麻烦的

 

开闭原则

开闭原则是什么?一下是原文

software entities (modules, classes, functions, etc.) should be open for extension , but closed for modification

翻译:软件实体(模块、类、方法等) 应该“对扩展开放、对修改关闭”。

目的:对外扩展开放、对内修改关闭(你盖了房子,觉得这不对了,那不对了不可能全拆了从改吧,扩展,比如家里的管道,插口会多留,以备以后修改)

“设计软件要容易维护又不容易出问题的最好的办法就是多扩展,少修改”

“无论模块多么的封闭,都会存在一些无法对之封闭的变化,既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择,他必须先猜测出最有可能发生的变化种类,然后抽造抽象来隔离那些变化”

(大话设计模式)

里氏替换

Functions that use use pointers or references to base classes must be able to use objects of derived classes without knowing it.

翻译:所有引用基类的地方必须能透明地使用其子类的对象。

继承的优点,可复用,可扩展

继承的缺点,入侵式,继承父类属性和方法。降低代码灵活性。增加耦合性,父类修改常量,变量,方法

在编译期,Java语言编译器会检查一个程序是否符合里氏替换原则,这是一个无关实现的、纯语法意义上的检查。里氏替换要求凡是使用基类的地方,子类一定适用,因此子类必须具备基类的全部接口。或者说,子类型的接口必须包括全部的基类的接口,而且还有可能更宽。如果一个Java程序破坏这一条件,Java编译器就会在编译程序时抛出错误提示,并停止编译。例如,一个基类Base声明了一个public方法method(),其子类Sub就不能将该方法的访问权限从public改换成为private或protected。即子类不能使用一个低访问权限的方法覆盖基类中的高访问权限的方法。

迪米特法则

一个对象应当对其他对象尽可能少的了解。

只与你直接的朋友们通信

不要跟“陌生人”说话

按照迪米特法则,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用;如果一个类需要调用另一个类的某一个方法,可以通过第三者转发这个调用。

 

接口隔离原则

给出该原则的定义,该原则有两个定义:

Clients should not be forced to depend upon interfaces that they don`t use.
客户端(调用者)不应该依赖它不需要的接口。

The dependency of one class to another one should depend on the smallest possible.
类间的依赖关系应该建立在最小的接口上。

和单一职责相似,房子有三个功能,做饭,读书,睡觉。写成三个接口,依次实现,而不是写在一个接口中,这个和单一职责的区别在于接口隔离偏接口。

 

依赖倒置原则

原则:
High level modules should not depend upon low level modules.Both should depend upon abstractions. Abstractions should notdepend upon details. Details should depend upon abstractions.
翻译:高层模块不应该依赖低层模块,两者都依赖其抽象;抽象不依赖细节;细节应该依赖于抽象。

应用,在现实生活中,司机只要会开车,就可以开奔驰车,也可以开宝马车,写一个开车方法,传一个人的对象就可以了,谁都可以开车,而不是张三开车,李四开车。

总结:最重要的两个就单一职责,开闭原则,所有的类都要单兵做战强,可扩展性强。

本文参考 程杰《大话设计模式》,韩敬海《设计模式》,王争《设计模式之美》

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值