02,软件设计原则 - 开闭原则

文章介绍了软件设计中的开闭原则,即对扩展开放,对修改关闭,以提高程序的可维护性和扩展性。通过创建抽象类AbstractSkin和其具体实现类如DefaultSkin、CarToonSkin,以及搜狗输入法类SougouInput的示例,展示了如何在不修改原有代码的情况下添加新功能。
摘要由CSDN通过智能技术生成

1,概念描述

对扩展开放,对修改关闭。 在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。

想要达到这样的效果,我们需要使用接口和抽象类。

因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。

2,案例演示

【例】搜狗输入法 的皮肤设计。
分析: 搜狗输入法 的皮肤是输入法背景图片、窗口颜色和声音等元素的组合。用户可以根据自己的喜爱更换自己的输入法的皮肤,也可以从网上下载新的皮肤。这些皮肤有共同的特点,可以为其定义一个抽象类(AbstractSkin),而每个具体的皮肤(DefaultSpecificSkin和HeimaSpecificSkin)是其子类。用户窗体可以根据需要选择或者增加新的主题,而不需要修改原代码,所以它是满足开闭原则的。
在这里插入图片描述

2.1 创建抽象皮肤类(抽象类)

/**
 * 抽象皮肤类
 */
public abstract class AbstractSkin{
    //显示的方法
    public abstract String display();

}

2.2 创建默认皮肤类

package com.study.designpatternboot.demo01_设计模式相关内容介绍.demo02_软件设计原则.demo01_开闭原则.demo02_开闭原则代码案例;

public class DefaultSkin extends AbstractSkin{
    @Override
    public String display() {
//        System.out.println("默认皮肤类");
        return "默认皮肤类";
    }
}

2.3 创建动漫皮肤类

package com.study.designpatternboot.demo01_设计模式相关内容介绍.demo02_软件设计原则.demo01_开闭原则.demo02_开闭原则代码案例;

public class CarToonSkin extends AbstractSkin {

    @Override
    public String display() {
        return "动漫皮肤";
    }
}

2.4 创建搜狗输入法类

package com.study.designpatternboot.demo01_设计模式相关内容介绍.demo02_软件设计原则.demo01_开闭原则.demo02_开闭原则代码案例;

public class SougouInput {
    private AbstractSkin skin;

    public void setSkin(AbstractSkin skin) {
        this.skin = skin;
    }

    public String display(){
        String display = skin.display();
        return display;
    }
}

2.5 测试

package com.study.designpatternboot.demo01_设计模式相关内容介绍.demo02_软件设计原则.demo01_开闭原则.demo02_开闭原则代码案例;

public class Client {
    public static void main(String[] args) {
        SougouInput sougouInput = new SougouInput();
        //创建皮肤对象
//        DefaultSkin defaultSkin = new DefaultSkin();
//        HeiMaSkin heiMaSkin = new HeiMaSkin();
        AbstractSkin maSkin = new DefaultSkin();
        sougouInput.setSkin(maSkin);
        String display = sougouInput.display();
        System.out.println(display);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值