概述
一点睛
对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。
想要达到这样的效果,我们需要使用接口和抽象类。
因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。
二 需求
下面以 搜狗输入法
的皮肤为例介绍开闭原则的应用。
分析:搜狗输入法
的皮肤是输入法背景图片、窗口颜色和声音等元素的组合。用户可以根据自己的喜爱更换自己的输入法的皮肤,也可以从网上下载新的皮肤。这些皮肤有共同的特点,可以为其定义一个抽象类(AbstractSkin),而每个具体的皮肤(DefaultSpecificSkin和HeimaSpecificSkin)是其子类。用户窗体可以根据需要选择或者增加新的主题,而不需要修改原代码,所以它是满足开闭原则的。
三 实现
1 代码
AbstractSkin
/**
* @version v1.0
* @ClassName: AbstractSkin
* @Description: 抽象皮肤类
* @Author: cakin
*/
public abstract class AbstractSkin {
// 显示的方法
public abstract void display();
}
DefaultSkin
/**
* @version v1.0
* @ClassName: DefaultSkin
* @Description: 默认皮肤类
* @Author: cakin
*/
public class DefaultSkin extends AbstractSkin {
public void display() {
System.out.println("默认皮肤");
}
}
HeimaSkin
/**
* @version v1.0
* @ClassName: HeimaSkin
* @Description: 黑马程序员皮肤
* @Author: cakin
*/
public class HeimaSkin extends AbstractSkin {
public void display() {
System.out.println("黑马皮肤");
}
}
SougouInput
/**
* @version v1.0
* @ClassName: SougouInput
* @Description: 搜狗输入法
* @Author: cakin
*/
public class SougouInput {
private AbstractSkin skin;
public void setSkin(AbstractSkin skin) {
this.skin = skin;
}
public void display() {
skin.display();
}
}
Client
/**
* @version v1.0
* @ClassName: Client
* @Description: 测试类
* @Author: cakin
*/
public class Client {
public static void main(String[] args) {
// 1 创建搜狗输入法对象
SougouInput input = new SougouInput();
// 2 创建皮肤对象
// DefaultSkin skin = new DefaultSkin();
HeimaSkin skin = new HeimaSkin();
// 3 将皮肤设置到输入法中
input.setSkin(skin);
// 4 显示皮肤
input.display();
}
}
2 测试
黑马皮肤
最后
以上就是淡然发箍为你收集整理的开闭原则实战一点睛二 需求三 实现的全部内容,希望文章能够帮你解决开闭原则实战一点睛二 需求三 实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复