设计模式要找到变化的内容中不变的部分,没有完美的设计模式,作为一名开发者要懂得取舍,触类旁通,开发出高内聚、低耦合、灵活性更高的软件产品
1.开闭原则(软件设计第一原则)
- 定义:一个软件实体应该对扩展开放,对修改关闭,即在不修改源代码的基础上扩展软件功能
- 本质思想:
2.依赖倒置原则
- 开闭原则是目标,依赖倒置是手段
- 三层含义:
- 依赖倒置原则的核心就是面向抽象(抽象类或者接口)编程
3.里氏替换原则
4.合成复用原则
- 定义:在软件复用时,要尽量使用组合/聚合(has a)等关联关系来实现,即组合/聚合优先于继承
- 如果要使用继承关系,则必须严格遵循里氏替换原则
- 合成复用原则和里氏替换原则是相辅相成的,两者都是开闭原则的具体实现规范
- 设计模式用继承对行为变化进行分类,而不是使用继承来复用逻辑
5.接口隔离原则
- 定义:使用多个专门的接口,而不是使用单一的总接口;客户端调用者代码不应该依赖它不需要的接口
- 使用原则:
- 目标:在发生代码变更,接口变更的情况下,尽量做到影响程度最低
6.迪米特法则
- 规则:一个类应该尽量少的对其他类相互作用(依赖/调用)
- 解释:只与直接朋友(私有成员变量、方法入参、new的对象)进行通信,间接朋友:调用直接朋友的方法获取到的对象
- 目的:让类之间解耦,提高类的复用性,当其他类发生变更的时候,对这个类的影响才最小
- 缺点:过于严格的遵守此原则,会导致系统产生大量透明的小方法,需要在朋友数量和小方法之间进行权衡
通过下面的例子加深理解,Person类想调用Stranger类执行一些逻辑
public class Person {
private Friend friend = null;
public void right(){
friend.callStrangerDoSomething();
}
public void wrong(){
Stranger stranger = friend.getStranger();
stranger.doSomething();
}
}
七.单一职责原则
- 单一职责原则要求一个接口或类只有一个原因引起变化(职责的范围因人而异)
- 一个接口或一个类只负责一件明确的事,负责的事情越少越好
- 如果其他类依赖了一个包含多个职责的类,也会被迫将不需要的职责包含进来,也违反了迪米特法则
|