设计模式
七大原则
单一职责原则
接口隔离原则
依赖倒转原则
里氏替换原则
开闭原则
迪米特法则
合成复用原则
一、单一职责原则
基本介绍:
- 每一个类应该只负责一项职责。
实例:
一个类A负责两个不同的职责,D1和D2,当D1的需求变更而导致类A的改变时,就可能导致D2出错,因此需要将A分为A1+A2。
二、接口隔离原则
基本介绍
- 一个类不应该依赖他不需要的依赖。
实例:
例如一个接口中有多个方法,而某个类只需要实现其中的某些方法,那么这个接口应该拆分为几个独立的接口。
三、依赖倒转原则
基本介绍:
高层模块不应该依赖底层模块、二者都应该依赖其抽象
中心思想就是面向接口编程
使用接口和抽象类定制好规范
实例:
1、通过接口传递依赖
2、通过构造方法传递依赖
3、通过setter()方法传递依赖
代码:接口传递
package com.rwl.principle.inversion;
public class Invert1 {
public static void main(String[] args) {
new Person().receive(new Email());
new Person().receive(new WeiXin());
}
}
interface Irec { //依赖倒转的关键是使用接口
public String getInfo();
}
}
class Person {
public void receive(Irec irec) {//这样只依赖这个接口,修改时只需要增加接口的实现类
System.out.println(irec.getInfo());
}
}
class WeiXin implements Irec {
public String getInfo() {
return "微信消息";
}
}
class Email implements Irec{
public String getInfo() {
return "电子邮件信息 : Hello";
}
}
四、里氏替换原则
基本介绍:
引用基类的地方必要能透明地使用其子类的对象。
尽量不要重写父类的方法
实例:
将继承关系不明显的父类 和子类解除继承关系(例如子类需要重写较多的父类方法时,就需要这样做)
1)让其都继承一个基类
2)用组合的关系
class A {
}
class B {
private A a = new A();//这是组合的关系
}
五、开闭原则
基本介绍:
一个软件实体如:类、模块、函数应该对扩展开放(对提供方),对修改关闭(使用方),用抽象构建架构,用实现拓展细节。
比如需要增加新功能,对增加功能开放,但是我们不能修改之前的代码,即对修改关闭。
开闭原则是编程中最基础、最重要的设计原则,其他的原则和设计模式的目的就是为了遵循开闭原则。
实例
1)spring的面向切面编程—AOP
2)还是多用接口,新的功能只要实现这个不需要改变的接口就行
六、迪米特法则
基本介绍
- 一个对象应该对其他对象保持最少的了解
- 一个类对自己依赖的类知道地越少越好(多使用private保密)
实例
1)类之间的依赖关系最好不要以局部变量的方式体现,而是放在方法参数、成员变量、方法返回值中。
2)即实现高内聚,不要把自己需要实现的方法写到别的类里面。
七、合成复用原则
基本介绍
- 能使用合成/聚合的方式,就不用继承的方式,这样可以解耦合。
实例
B想使用A的方法
合成:类B的方法中,将类A作为这个方法的参数
聚合:在类B中创建类A的成员变量