面向对象设计

1:面向对象的三要素
1.1 封装【EncapSulation】 
A 封装=合理的隐藏
数据的隐藏【隐藏在方法背后】 
实现的隐藏【隐藏在接口背后】 
变化的隐藏【隐藏在抽象背后】 
B 封装能够
提高对象的复用性
减低对象的耦合度
C 良好的封装=对象的高内聚  
1.2 继承【Inheritance】 
A 基于差异式编程
B 继承与合成/聚合
合成/聚合复用原则
B 继承的方式
类的继承
接口的继承
C 继承与实现 
1.3 多态【Polymorphism】 
A 多态指对象在不同时刻体现不同形态的能力
B 抽象与多态
C 多态的形式
基类继承式多态
接口实现式多态 
2:面向对象的五原则
2.1 单一职责原则【SRP】 瑞士军刀
A 单一职责保证了
对象的细粒度--便于复用
对象的单一性--利于稳定
B 单一职责分离了变与不变
C 不要创建“上帝”类Facade类除外 
2.2 开闭原则【OCP】 
A 对于扩张开放对于更改封闭
B 开闭原则的核心是“抽象” 
C 多态保证了扩张的开放性
D 开放意味着是想是可替换的 
2.3 替换原则【LSP】 
A 子类型必须能够完全替换父类型
B  替换关注的是行为的可替换
C  替换原则 
可以验证继承关系正确性的准则(is a) 
体现了对个是现在接口的一致性
如果违背该原则通常的做法是引入新的超类将以前的父子关系转变为兄弟关系
2.4 依赖倒置原则【DIP】 
A 面向接口编程
B 抽象不依赖于细节,细节应该依赖于抽象
C 高层模块与底层模块以及客户端与服务器端模块应该依赖于接口而不应该依赖于实现
D 依赖倒置原则的核心是“抽象” 和“间接”
2.5 接口隔离原则【ISP】 
A 接口尽量小防止接口污染
B 接口若要稳定就应当承担较少的这则【符合单一职责原则】 
C 可以合理利用接口的继承
D 同一个类可以实现多个接口站在调用者的角色不同的接口代表不同的关注点,不同的职责甚至不同的角色 
3:面向对象的六观点
3.1 复用【Reusibility】
A 软件设计最大的敌人是重复
B 重复的代码会导致解决方案的蔓延
C 细粒度,封装,高内聚
D 相关模式
Prototype模式
Proxy模式
E 如何提高软件的复用性
方法级{重购之方法提取,辅助方法,利用静态工厂复用对象的创建逻辑} 
对象级{遵循单一职责原则,合理的封装,辅助类,AOP} 
模块级{更具依赖关系划分包,复用的力度就是发布的粒度,一个包中的所用类应该是共同复用的} 
3.2 扩展【Extenbility】
A 不修改原有代码增加新的功能谓之扩展
B 实现扩展的方式
利用继承实现扩展
利用组合实现扩展
利用继承和组合实现扩展
利用抽象实现扩展
C 相关设计模式
Decorator模式
Visitor模式
Proxy模式 
3.3 分离【Separability】
A 软件设计需重视职责的分离
B 分离需要和抽象结合实现依赖的解耦
C 职责分离体现了
单一职责原则
接口隔离原则
D 职责分离表现为
如何定义职责
如何分解职责
如何抽象职责
E 分离的目标
分离变与不变
分离接口和实现
分离数据和行为
F 相关设计模式
FactoryMethod模式
Bridge模式
Iterator模式 
3.4 变化【Change】
A 封装变化是解决之道
B 封装变化的核心是抽象
封装创建的变化
封装结构的变化
封装行为的变化
C 解决变化应遵循
开闭原则
依赖倒置原则
D 封装变化的本质是隔离变化
E 隔离变化的方法
通过分离
通过抽象
依赖注入
F 相关模式
FactoryMothod模式
AbatractFactory模式
Strategy模式 
3.5 简约【Simplicity】
A 简约需遵循
Kiss原则
场景驱动设计
避免设计过度
B 如何实现简约
封装有利于简约:职责的封装
继承有利于简约:职责的服用
多态用利于简约: 职责的委托
C 简约不等于简陋等于简单而优雅
D 简约需要重构和精益求精
E 如何考量简约
可复用性
可扩展性
可测试性
F 相关模式
Facade模式
Singletion模式
Composite模式
TempletMethod模式
Strategy模式 
3.6 一致【Coherance】
A 一致体现了软件结构的和谐与平衡
B 一致体现为
接口的一致:对于实现可替换
形式的一致:窥一斑而知全豹
调用的一致:客户可透明访问
C 相关模式
Composite模式
Adapter模式 
原文地址:https://www.cnblogs.com/tommyli/p/1509461.html