面向对象的设计目标:
1 可扩展性 → 容易添加新的功能
2 灵活性 → 添加新功能代码时,修改平稳发生
3 可插入性 → 容易将一个类抽出去,同时将另一个有同样接口的类加进来
终极的判断软件设计质量标准:
高内聚 :一个软件模块是由相关性很强的代码组成
低耦合 :模块与模块之间,尽可能使其独立存在
设计的基本原则:
1 单一职责原则
2 开放-封闭原则
3 里氏代换原则
4 依赖倒置原则
5 接口隔离原则
6 迪米特法则
1 单一职责原则
只管它该管的,不该管的不管
一个类只负责一个功能领域的相应职责
高内聚
一个类(大到模块,小到方法)承担的职责越多,被复用的可能性越小 → 应将不同的职责封装在不同的类中
示例:
Dao 只做查询数据库的功能
2 开放-封闭原则
对扩展开放,对修改关闭
软件实体尽量在不修改原有代码的情况下进行扩展
高内聚 低耦合
为了满足开闭原则,需要对系统进行抽象化设计,"抽象化"是开闭原则的关键
示例:
展示图表,把条形图 饼状图 折线图 抽象出一个 基本图表出来.
3 里氏代换原则
低耦合
优点:可以很容易的实现 同一父类下各个子类的互换,而客户端毫无察觉
示例:
玩具枪是不能射击的,为了方便以后替换,所以把 真枪 和 玩具枪 分开来
4 依赖倒置原则
定义:要依赖于抽象,不要依赖于具体
低耦合
要针对接口编程,不针对实现编程
优点:
依赖倒置原则 使细节和策略都依赖于抽象,抽象的稳定性决定了系统的稳定性
示例:
妈妈不仅能读书,还能读报纸.抽象出IReader啥都能读
5 接口隔离原则
定义:使用多个专一功能的接口 比 使用一个总接口 总要好
一个类对另一个类的依赖性 应当是建立在 最小接口上的,过于臃肿的接口是对接口的污染.
高内聚
优点:会使一个软件系统功能扩展时,修改的压力不会传到别的对象那里.
示例:
找演员和找模特 的要求有相同点(身材好),把(身材好)这个功能 单独放在一个接口.
注意:接口大小要适度,过大和过小都不好
6 迪米特法则
又叫做 最小知识原则,简写LKP
定义:对象与对象之间应该使用尽可能少的方法来管关联,避免千丝万缕的关系
低耦合
类 知道的其他的类应尽量少
类可以访问其他类的 方法或属性 应 尽量少
示例:
lucy 和 lily 只要知道 上KFC 就能吃到 汉堡包,lucy 和 lily 不需要知道 汉堡包 是怎么制作的