六大设计原则

1. 单一职责原则

定义:有且仅有一个原因引起类的变更

There should never be more than one reason for a class to change.

优点:

  • 类的复杂性降低

  • 可读性高

  • 可维护性提高

  • 变更引起的风险降低

很难做到。

接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。

2. 里氏替换原则

  • 第一种定义,也是最正宗的定义:If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T,the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.

    (如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。)

  • 第二种定义:Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.

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

通俗说来:只要父类能出现的地方子类就可以出现,且替换为子类也不会产生任何异常和错误。

  1. 子类必须完全实现父类的方法:如果子类不能完整地实现父类的方法,建议断开继承关系,采用依赖、聚集、组合等关系代替继承

  2. 子类可以有自己的个性

  3. 覆盖(overload)或实现父类方法时输入参数可以被放大

  4. 覆写(override)或实现父类的方法时输出结果可以被缩小

3. 依赖倒置原则

High level modules should not depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details.Details should depend upon abstractions.

  • 高层模块不应该依赖低层模块,二者都应该依赖其抽象

  • 抽象不应该依赖细节

  • 细节应该依赖抽象

依赖倒置原则在Java语言中的表现就是:

  • 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。

  • 接口或抽象类不依赖于实现类

  • 实现类依赖接口或抽象类

就是不要依赖于实现类,要依赖于接口

4. 接口隔离原则

  • 实例接口 class

  • 类接口 interface

定义:

  • 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 interface.(类间的依赖关系应该建立在最小的接口上。)

总的来说:建立单一接口,不要建立臃肿庞大的接口。即接口尽量细化,接口中的方法尽量少。

  1. 接口尽量小:小是有限度的,不能违反单一职责原则。

  2. 接口要高内聚:高内聚就是提高接口、类、模块的处理能力,减少对外的交互。

  3. 定制服务:只提供访问者需要的方法

  4. 接口设计是有限度的

5. 迪米特法则

定义:又称为最少知识原则(Least Knowledge Principle LKP)。一个对象应该对其他对象由最少的了解。

  1. 只和直接的朋友交流。每个对象必然会与其他对象由耦合关系。

  2. 朋友间也是有距离的:要求对外公布尽可能少的public方法和非静态public 变量

  3. 是自己的就是自己的:如果一个方法放在本类中,既不增加类间关系,也对本类不产生负面影响,那就放置在本类中。

  4. 谨慎使用Serializable:

核心观念:类间解耦,弱耦合。

6. 开闭原则

Software entities like classes,modules and functions should be open for extension but closed for modifications.(一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。)

开闭原则:我们应尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有代码来完成变化。

开闭原则是最基础的一个原则,前五个原则都是开闭原则的具体形态,开闭原则才是真正的精神领袖。

  1. 开闭原则对测试的影响

  2. 开闭原则可以提高复用性

  3. 开闭原则可以提高可维护性

  4. 面向对象开发的要求

  • Single Responsibility Principle:单一职责原则

  • Open Closed Principle:开闭原则

  • Liskov Substitution Principle:里氏替换原则

  • Law of Demeter:迪米特法则

  • Interface Segregation Principle:接口隔离原则

  • Dependence Inversion Principle:依赖倒置原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值