目录
1、单一职责原则
如果一个类承担的职责过多,就等于把这些职责耦合在一起了。一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。而如果想要避免这种现象的发生,就要尽可能的遵守单一职责原则。此原则的核心就是解耦和增强内聚性。
总结:让代码高内聚,低耦合。
2、开闭原则
对原有的功能关闭,对扩展的功能打开
⼩结:有了开闭原则,⾯向需求的变化就能进⾏快速的调整实现功能,这⼤⼤提⾼系统的灵活性,可重⽤性和可维护性,但会增加⼀定的复杂性。
3、里式替换原则
在不影响程序正确性的基础上,所有使用基类的地方都可以使用父类代替。
错误案例:
public Class Test{
class Bird{
public abstract void fly();
}
// 鸵鸟类
class TuoNiao extends Bird{
@Override
public void fly{
System.out.println("I can not flying");
}
}
}
违反了里式替换原则。程序中的对象应该可以被其子类实例替换掉,虽然说他语法没用错误,但是显示生活中,鸵鸟是不会飞的!
总结:里式替换原则的目的就是要保证程序继承关系的正确性,所有⼦类的⾏为功能必须和使⽤者对其⽗类的期望保持⼀ 致,如果⼦类达不到这⼀点,那么必然违反⾥⽒替换原则。
4、接口隔离原则
定义:类不应该依赖自己不需要的接口。因为如果接口有很多的抽象方法,子类只需要实现一个方法,其他的方法只能控制,这样看代码会显得很臃肿。
使用多个特定的细分的接口比单一的总接口要好。不能强迫类去实现它不需要实现的接口。
总结:接口的隔离原则主要功能就是控制粒度的大小,防止暴露给客户不相关的代码和方法,保证接口的内聚,低耦合。
5、依赖倒置原则
定义:
- 高层模块不应该直接依赖与底层模块。
- 抽象不应该直接依赖细节,细节应该依赖抽象。(细节指的是实现类)
依赖置换原则代码案例展示
简介:此原则符合了SOILD原则
需求:员工使用不同的工具做出不同的功能
1、编写接口
public interface Tools {
/**
* 修理
*/
void repair();
}
2、编写扳手实现类
public class Wrench implement Tools{
@Override
public void repair() {
System.out.println("扳手开始修理!");
}
}
3、编写测试实现类
public class Pliers implements Tools{
@Override
public void repair() {
System.out.println("钳子开始修理!");
}
}
4、编写高层模块
public class Worker(){
public void repair(Tools tools){
tools.repair();
}
}
5、此处有两种写法
5-1第一种写法
public class Main{
public static void main(String[] args){
// 创建工人类
Worker worker = new Worker();
// 创建接口的实现类 (多态创建)
Tools tools = new Wrench();
// 调用工人休息 编译看右边,运行看左边
tools.repair();
}
}
5-2 第二种写法 优化第一种写法 事情分开做
添加一个spring-properties 文件
beanName:com.nf.dip.Pliers
添加一个BeanFactory类
public class BeanFactory{
public static<T> T getBean(String key){
String className = getStringName(key);
return (T) Class.forName(className).getConstrouctor().newInstance();
}
// 返回配置文件的 class 类路径名
private String getStringName(String key){
// 创建配置文件用来保存空配置文件
Properties pro = new Properties();
// 通过类加载器读取配置文件添加到Properties文件中
pro.load(Main.class.getClassLoader().getResourceAsStream("spring-properties"));
// 通过pro.getProperty() 方法来获取配置文件信息 并返回
return pro.getProperty();
}
}
添加测试类
public class Main{
public static void main(String[] agrs){
// 通过工厂创建bean对象
Tools tools = BeanFactory.getBean("beanName");
// 创建工人对象
Worker worker = new Worker();
// 调用工人修理的方法
worker.repair(tools);
}
}
依赖倒置原则总结:
依赖倒置原则,可以减少类之间的耦合性,提高系统的稳定性。提高代码的可读性维护性。同时依赖倒置原则也是设计框架的核心思想。