一、开闭原则
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。后面的具体设计中我们会提到这点。
实例介绍:模拟输入法更换皮肤
1、创建一个抽象的皮肤类,里边含有抽象的显示的方法
package SP_1_OpenClosePrinciple;
/**
* @Author: {LZG}
* @ClassName: AbstractSkin
* @Description: 一个抽象的皮肤类
* @Date: 2022/3/31 0:58
**/
public abstract class AbstractSkin {
// 显示的方法
abstract void display();
}
2、创建两个具体的皮肤类、并重写显示的方法
默认皮肤类
package SP_1_OpenClosePrinciple;
/**
* @Author: {LZG}
* @ClassName: DefaultSkin
* @Description: 一个默认的皮肤类
* @Date: 2022/3/31 1:00
**/
public class DefaultSkin extends AbstractSkin{
@Override
void display() {
System.out.println("默认皮肤");
}
}
LOL皮肤类
package SP_1_OpenClosePrinciple;
/**
* @Author: {LZG}
* @ClassName: LOLSkin
* @Description: LOL默认皮肤
* @Date: 2022/3/31 1:01
**/
public class LOLSkin extends AbstractSkin{
@Override
void display() {
System.out.println("一个英雄联盟的默认皮肤类");
}
}
3、创建一个输入法类,目的是注入具体的皮肤
package SP_1_OpenClosePrinciple;
/**
* @Author: {LZG}
* @ClassName: SkinInput
* @Description: 输入法
* @Date: 2022/3/31 1:02
**/
public class SkinInput {
private AbstractSkin abstractSkin;
public void setSkin(AbstractSkin abstractSkin){
this.abstractSkin=abstractSkin;
}
public void display(){
abstractSkin.display();
}
}
4、模拟一个客户设置皮肤过程
package SP_1_OpenClosePrinciple;
/**
* @Author: {LZG}
* @ClassName: Client
* @Description: 模拟客户设置皮肤
* @Date: 2022/3/31 1:05
**/
public class Client {
public static void main(String[] args) {
// 1、创建输入法对象
SkinInput skinInput = new SkinInput();
// 2、创建皮肤对象
// DefaultSkin skin = new DefaultSkin();
LOLSkin skin = new LOLSkin();
// 3、将皮肤设置到输入法
skinInput.setSkin(skin);
// 4、显示皮肤
skinInput.display();
}
}
流程的文本解释:
①生成一个输入法
②选择需要显示的皮肤
③将选择好的皮肤确定注入输入法中
④查看显示的效果
运行结果
总结:对扩展开放:如果在想要一个新的皮肤可以直接生成一个类,客户直接选择那个生成的类即可,对原有的代码不做任何改动。