为了提高系统软件的可维护性、可复用性、可扩展性和灵活性
对扩展开放,对修改关闭 (热插拔)
实现方式: 通过定义接口和实现类的方式实现开闭原则,我们再进行程序扩展时,不需要修改原代码,只需要再给该接口重新派生一个实现类即可
案例:
以搜狗输入法换皮肤为例,介绍开闭原则的使用
/**
* @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();
}
}
/**
* @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();
}
}
体会上述案例中展示出的开闭原则: 当我们的客户端需要新增一皮肤时,只需要重写一新的皮肤类,继承抽象皮肤类,我们只需要在客户端更换一下调用,而不需要修改原有代码,实现了对扩展开放,对修改关闭