1.寻找合适的对象,如何将现实世界种的对象抽象出来,或者找出现实世界中不存在的对象,这步将直接导致后面设计的好坏。因为如果不能找到合适的对象,那么你的设计又将在哪里呢?
2.决定对象的粒度
尽量将粒度细化到最小,比如你认为4个轮子的是汽车,那如果出现了8个轮子的汽车那将怎么办呢?
3.将对象通用的操作定义为接口,比如麻雀和大雁可以定义出鸟类接口,而且都有飞的操作。
4.描述对象的实现
即你怎么去拿到你想要的对象,不管用什么手段和方法。
5.设计应支持变化
1) 通过显式地指定一个类来创建对象在创建对象
2) 对特殊操作的依赖
3) 对硬件和软件平台的依赖
4) 对对象表示或实现的依赖
5) 算法依赖
6) 紧耦合
7) 通过生成子类来扩充功能
8) 不能方便地对类进行修改
可复用面向对象编程原则:
1.针对接口编程,而不是针对实现编程
当你不得不去拿到具体的实现时,已经有一些设计模式帮你解决这个问题,比如abstract factory,builder等等
2.优先使用对象组合,而不是类继承
2、1当你使用子类的时候,必然会依赖于父类,当父类变更的时候,必然影响到子类
组合要求对象遵守彼
此的接口约定,进而要求更仔细地定义接口,而这些接口并不妨碍你将一个对象和其他对象
一起使用。
2.2对象组合对系统设计还有另一个作用,即优先使用对象组合有助于你保持每个类被封装,
并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控
制的庞然大物。另一方面,基于对象组合的设计会有更多的对象(而有较少的类),且系统的行
为将依赖于对象间的关系而不是被定义在某个类中。
理想的情况下,我们可以利用组合获取所有想要的组件。
2.3委托是对象组合的特例。它告诉你对象组合作为一个代码复用机制可以替代继承。
2.决定对象的粒度
尽量将粒度细化到最小,比如你认为4个轮子的是汽车,那如果出现了8个轮子的汽车那将怎么办呢?
3.将对象通用的操作定义为接口,比如麻雀和大雁可以定义出鸟类接口,而且都有飞的操作。
4.描述对象的实现
即你怎么去拿到你想要的对象,不管用什么手段和方法。
5.设计应支持变化
1) 通过显式地指定一个类来创建对象在创建对象
2) 对特殊操作的依赖
3) 对硬件和软件平台的依赖
4) 对对象表示或实现的依赖
5) 算法依赖
6) 紧耦合
7) 通过生成子类来扩充功能
8) 不能方便地对类进行修改
可复用面向对象编程原则:
1.针对接口编程,而不是针对实现编程
当你不得不去拿到具体的实现时,已经有一些设计模式帮你解决这个问题,比如abstract factory,builder等等
2.优先使用对象组合,而不是类继承
2、1当你使用子类的时候,必然会依赖于父类,当父类变更的时候,必然影响到子类
组合要求对象遵守彼
此的接口约定,进而要求更仔细地定义接口,而这些接口并不妨碍你将一个对象和其他对象
一起使用。
2.2对象组合对系统设计还有另一个作用,即优先使用对象组合有助于你保持每个类被封装,
并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控
制的庞然大物。另一方面,基于对象组合的设计会有更多的对象(而有较少的类),且系统的行
为将依赖于对象间的关系而不是被定义在某个类中。
理想的情况下,我们可以利用组合获取所有想要的组件。
2.3委托是对象组合的特例。它告诉你对象组合作为一个代码复用机制可以替代继承。