1. 软件设计原则:
为了提高系统软件的可维护性、可复用性、可扩展性和灵活性
1.1 开闭原则:
对扩展开放,对修改关闭 (热插拔)
实现方式: 通过定义接口和实现类的方式实现开闭原则,我们再进行程序扩展时,不需要修改原代码,只需要再给该接口重新派生一个实现类即可
案例:
以搜狗输入法换皮肤为例,介绍开闭原则的使用
- 首先定义一皮肤抽象类,其他具体的皮肤实现类继承皮肤抽象类,重写其 display 展示方法
/**
* @description: 搜狗输入法抽象皮肤类
* @author: Liuwanqing
* @date: 2022-11-17 13:12
*/
public abstract class AbstractSkin {
public void display(){
System.out.println("展示抽象皮肤");
}
}
- 定义搜狗输入法默认皮肤类,继承抽象类,重写方法
/**
* @description: 搜狗输入法默认皮肤类
* @author: Liuwanqing
* @date: 2022-11-17 13:14
*/
public class DefaultSkin extends AbstractSkin{
public void display(){
System.out.println("展示默认的皮肤");
}
}
- 定义搜狗输入法自定义皮肤类,继承抽象类,重写方法
/**
* @description: 我自定义的皮肤类
* @author: Liuwanqing
* @date: 2022-11-17 13:14
*/
public class WanqingSkin extends AbstractSkin{
public void display(){
System.out.println("展示我自定义的皮肤");
}
}
- 定义搜狗输入法聚合类,其具有抽象类对象,并且具有展示方法
/**
* @description: 搜狗输入法,用于聚合皮肤类
* @author: Liuwanqing
* @date: 2022-11-17 13:16
*/
public class SouGouInput {
private AbstractSkin skin;
public void setSkin(AbstractSkin skin){
this.skin = skin;
}
public void display(){
skin.display();
}
}
- 定义测试类,即客户端调用类,其为聚合类设置皮肤,并调用 display 方法
/**
* @description: 测试类
* @author: Liuwanqing
* @date: 2022-11-17 13:18
*/
public class Client {
public static void main(String[] args) {
SouGouInput souGouInput = new SouGouInput();
DefaultSkin skin = new DefaultSkin();
souGouInput.setSkin(skin);
souGouInput.display();
}
}
体会上述案例中展示出的开闭原则: 当我们的客户端需要新增一皮肤时,只需要重写一新的皮肤类,继承抽象皮肤类,我们只需要在客户端更换一下调用,而不需要修改原有代码,实现了对扩展开放,对修改关闭