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