Java与模式读书笔记

2018-05-02  本文已影响0人  我的小鱼干去哪儿了

1. 什么是模式?

模式化的过程是把问题抽象化,在忽略掉不重要的细节后,发现问题的一般性本质,并找到普遍适用的解决方案的过程。

2. 好的系统应该具有的性质

3. 开闭原则 (OCP)

一个软件实体应该对扩展开放,对修改封闭
对可变性的封装原则: 找到一个系统的可变因素,将其封装起来

继承

继承应当被看做是封装变化的方法,而不应当被认为是从一般的对象生成特殊的对象的方法。

与里氏替换原则的关系

(1)里氏替换:任何基类可以出现的地方,子类一定可以出现。
(2)里氏替换原则是对开闭原则的补充。
实现开闭原则的关键步骤是抽象化。
基类与子类的继承关系就是抽象化的具体体现。
里氏替换是对实现抽象化的具体步骤的规范。
(3)违背里氏替换原则的也违背开闭原则,反之不然。

与依赖倒转原则的关系

(1) 依赖倒转: 要依赖于抽象,不要依赖于实现
(2) 开闭原则是目标,依赖倒转是手段

与合成/聚合复用原则的关系

(1) 合成/聚合复用原则:要尽量使用合成/聚合,而不是继承关系达到目的
(2) 合成/聚合复用原则 与 里氏替换原则 是相辅相成的
(3) 与里氏替换原则一样,是对实现抽象化的具体步骤的规范
(4) 是实现开闭原则的必要条件,如果违法这一原则,系统就无法实现开闭原则。

与迪米特法则的关系

(1) 一个软件实体应当尽可能少的与其他实体发生相互作用。
(2) 迪米特法则容易做到对修改的封闭,是一条通向开闭原则的道路。

与合成/聚合复用原则的关系

(1) 合成/聚合复用原则: 应当为客户端提供尽可能小的单独的接口,而不是提供大的总接口。
(2) 限制了通信的宽度,不会将修改的压力传递到其他的对象。

4. 接口

4.1 可插入性构件

关键在于存在一个公用的接口,以及每个构件都实现了这个接口。

4.2 接口

接口是实现可插入性构件的关键。
接口把方法的特征和方法的实现分割开来。
接口通常代表一个角色(Role), 它包含与该角色相关的操作与属性,而实现这个接口的类便是扮演这个角色的演员。

接口提供了关联以及方法调用上 的可插入性。

5. 抽象类

(1)抽象类可以同时有抽象方法和具体方法。
(2)抽象类一定是用来继承的,只要有可能,不要从具体类继承。
(3)IS-A关系才符合继承关系,Has-A 关系符合聚合关系。

6. 里氏替换原则 (LSP)

一个软件实体如果使用的是其基类的话,那么一定适用于其子类,而它根本不能察觉出基类对象和子类对象的区别。

里氏替换原则是继承复用的基石。

7. 依赖倒转原则(DIP)

要依赖于抽象,不依赖于具体。要针对接口编程,不针对实现编程。
开闭原则是面向对象设计的目标,依赖倒转原则是面向对象设计的主要机制。

7.1 三种耦合关系

8.接口隔离原则(ISP)

使用多个专门的接口比使用单一的总接口要好
一个接口应当简单的代表一种角色(单一责任原则)

9. 合成/聚合复用原则 (CARP)

要尽量使用合成/聚合,尽量不要使用继承。

9.1 合成

合成表示拥有关系或者整体与部分的关系

9.2 聚合

聚合也表示整体与部分的关系,但是部分与整体的生命周期是一样的。

9.3 Has-A 和 Is-A

如果两个类的关系是Has-A, 那么这两个类一定违反里氏替换原则。
只有两个类符合里氏替换原则,才有可能是Is-A关系。

10. 迪米特法则(LoD Low Of Demeter)

又叫最少知识原则,一个对象应当对其他对象有尽可能少的了解。
一个对象仅仅与其朋友发生相互作用。

11. SOLID原则 总结

缩写 全程 中文
S The Single Responsibility Principle 单一责任原则
O The Open Closed Principle 开放封闭原则
L Liskov Substitution Principle 里氏替换原则
I The Interface Segregation Principle 接口分离原则
D The Dependency Inversion Principle 依赖倒置原则

12. 参考文献

  1. Java与模式
  2. 面向对象的SOLID原则
上一篇 下一篇

猜你喜欢

热点阅读