个人学习整合自
- 《Java设计模式》 刘伟 编著
面向对象设计原则
目的是软件的可维护性和可复用性。
最常见的有以下七个。
1. 单一职责原则
Single Responsibility Principle(SRP)
一个对象一个只包含单一的职责,并且该职责被完整地封装在一个类中。
比如说一个类里面有数据库连接方法,数据库CRUD方法,显示打印方法,那么对应的实例对象的职责就太多了。以后每次对某个方法修改都对整个类改动。不符合单一职责原则。应该分为三个类
- DBUtil: 负责数据库连接的类,getConnection()方法。
- CustomerDAO: 类里面放CRUD方法。
- CustomerEcho: 类里面放打印显示的功能方法。
2. 开闭原则
Open-Closed Principle(OCP)
软件实体应该对拓展开放,对内修改关闭。
就是说有新需求的时候,我们不用修改现在的代码,只需要添加新的代码就可以了。所有就需要对系统进行抽象化设计了。分为抽象层(接口、抽象类)和实现层。新需求代码就多写拓展实现层就行了。
3. 里氏代换原则
Liskov Substitution Principle(LSP)
所有引用基类的地方必须能透明地使用其子类的对象
里氏是一个外国提出者的姓氏而已,就是说可以将一个基类对象替换成其子类的对象,程序不产生错误和异常,但是发过来就不行。不能将把子类对象替换成基类。比如我喜欢动物(基类),所以我一定喜欢狗(子类),但是反过来不行。类似多态。
Animal a = new Animal();
Dog d = new Dog();
(Animal)d; // 不一定行
(Dog)a; // 可以
4. 依赖倒转原则
Dependence Inversion Principle(DIP)
高层模板不应该依赖低层模板,它们都应该依赖抽象。抽象不应该依赖于具体细节,细节应该依赖于抽象。
也就是针对抽象层编程,面向接口编程,将具体类的对象通过依赖注入的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发送依赖关系时(前者是后者的属性)采用抽象的形式来注入所依赖的对象。
类似Spring,常用的注入方式有三种,分别是构造注入、设置注入(setter注入)、接口注入。
5. 接口隔离原则
Interface Segregation Principle(ISP)
客户端不应该依赖那些它不需要的接口。
6. 合成复用原则
Composite Reuse Principle(CRP)
优先使用对象组合,而不是通过继承来达到复用的目的。
7. 迪米特法则
Law of Demeter(Lod)
每一个软件单位对其他单位都只有最少的知识,而且局限于那些与本单位密切的软件单位。
迪米特是个人名,这个法则也被称为最少知识法则