设计模式-开闭原则

含义

对扩展开发,对修改关闭。在程序需要进行扩展时,不能去修改原有的代码,实现一个”热插拔“的效果,目的是为了让程序扩展性好、易于维护和升级。

​ 想要达到这一的效果,需要使用接口和抽象类来实现。在软件中对于 **易变 **的部分可以通过抽象类派生出来的实现类进行扩展。当软件需要发生变化时,只需要根据需求重写派生出一个实现类来扩展即可。

案例分析

​ 根据输入法的皮肤举例,用户可以根据喜好选择输入法的皮肤,对于众多的皮肤可以定义一个抽象类AbstractSkin, 对于每个具体的皮肤定义为 DefaultSkinBlueSkin两个皮肤。最后通过一个测试类来选择需要使用哪一个皮肤。

​ 其中,抽象类AbstractSkin中存在方法display()

  • AbstractSkin:抽象类

  • DefaultSkin:抽象类的派生类

  • BlueSkin:抽象类的派生类

代码示例

AbstractSkin 抽象类,其中display()方法将有具体的实现类来实现。

1
2
3
public abstract class AbstractSkin {
public abstract void display();
}

DefaultSkin 实现类

1
2
3
4
5
6
public class DefaultSkin extends AbstractSkin{
@Override
public void display() {
System.out.println("默认的皮肤");
}
}

BlueSkin 实现类

1
2
3
4
5
6
public class BlueSkin extends AbstractSkin{
@Override
public void display() {
System.out.println("蓝色的皮肤");
}
}

TestDemo 测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class TestDemo {
public static void main(String[] args) {

// 定义一个抽象类属性
AbstractSkin skin = null;

// 给 skin 赋予 默认的皮肤实现类对象
skin = new DefaultSkin();
// 调用方法
skin.display();

// 给 skin 属性赋予 蓝色的皮肤对象
skin = new BlueSkin();
// 调用方法
skin.display();
}
}

​ 当我们需要添加其它皮肤时,只需要创建一个新的皮肤类并继承 AbstractSkin 抽象类即可。

1619708639672


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!