🌈个人主页: Aileen_0v0
🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法
💫个人格言:“没有罗马,那就自己创造罗马~”
软件设计原则
软件开发最重要的是提高软件的可维护性
,可复用性
,可扩展性
,灵活性
,所以在开发过程中我们要根据以下六个原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。
开闭原则
开闭原则的含义
开闭原则
:对扩展开发,对修改关闭。 在进行拓展的时候,不能修改原有代码,实现一个热插拔效果。使得程序扩展性好,易于维护和升级。
开闭原则的实现及效果
效果实现
: 抽象类和接口。- 因为抽象灵活性好,适应性广,只要抽象合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。
-
- 下面以搜狗输入法为例,介绍开闭原则:
- 下面以搜狗输入法为例,介绍开闭原则:
- 分析:搜狗输入法的皮肤是输入法背景图片、窗口颜色和声音等元素的组合。用户可以根据自己的喜爱更换自己的输入法的皮肤,也可以从网上下载新的皮肤。这些皮肤有共同的特点,可以为其定义一个抽象类(AbstractSkin),而每个具体的皮肤(DefaultSpecificSkin和XiantiaoxiaogouSkin)是其子类。用户窗体可以根据需要选择或者增加新的主题,而不需要修改原代码,所以它是满足开闭原则的。
上图中默认皮肤和线条小狗皮肤都继承了抽象皮肤这个类,并且重写了display()
这个方法;搜狗输入法与抽象皮肤之间是关联关系,表示搜狗输入法依赖于抽象皮肤这个类,也就是说搜狗输入法中有一个抽象皮肤类型的成员变量skin
,这意味着SouGouInput
可以与任何AbstractSkin
的实例关联。
具体代码实现
- 代码实现
package principles.open_close;
/**
* @Description:抽象皮肤类
*/
public abstract class AbstractSkin {
//显示的方法
public abstract void display();
}
package principles.open_close;
/**
* @Description:默认皮肤类
*/
public class DefaultSkin extends AbstractSkin{
public void display(){
System.out.println("默认皮肤");
}
}
package principles.open_close;
/**
* @Description:线条小狗皮肤类
*/
public class Xiantiaoxiaogou extends AbstractSkin{
public void display()
{
System.out.println("线条小狗皮肤");
}}
package principles.open_close;
/**
* 搜狗输入法
* @param
* @return
*/
public class SougouInput {
//由于这个变量是private的,所以下面要提供set方法进行初始化才能赋值
private AbstractSkin skin;
public void setSkin(AbstractSkin skin) {
this.skin = skin;
}
public void display(){
skin.display();
}
}
package principles.open_close;
public class Client {
public static void main(String[] args) {
//1.创建搜狗输入法的对象
SougouInput input = new SougouInput();
//2.创建皮肤的对象
DefaultSkin skin2 = new DefaultSkin();
// Xiantiaoxiaogou skin = new Xiantiaoxiaogou();
//3.将皮肤设置到输入法中
input.setSkin(skin2);
// input.setSkin(skin);
//4.显示皮肤
input.display();
}
}
-
根据运行结果,我们可以看到,当我们需要换皮肤时只需要创建对应的皮肤对象,并调用对应的方法即可使用。
-
如果我们要拓展新皮肤则可以创建新的皮肤类,然后继承抽象皮肤,如下代码所示:
package principles.open_close;
public class Lanyangyang extends AbstractSkin{
public void display(){
System.out.println("这里是懒羊羊皮肤");
}
}
package principles.open_close;
public class Client {
public static void main(String[] args) {
//1.创建搜狗输入法的对象
SougouInput input = new SougouInput();
//2.创建皮肤的对象
Lanyangyang skin3 = new Lanyangyang();
//3.将皮肤设置到输入法中
input.setSkin(skin3);
//4.显示皮肤
input.display();
}
}
总结
总结:
从上面我们就能深刻的体会到开闭原则,就是对拓展开发(比如说我们要拓展新的皮肤),对修改关闭(我们不需要修改原来的其它类的代码)。