【AI与设计模式:开闭原则的创新之旅】

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
🌈个人主页: 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();
    }
}

在这里插入图片描述

在这里插入图片描述

总结

  • 总结: 从上面我们就能深刻的体会到开闭原则,就是对拓展开发(比如说我们要拓展新的皮肤),对修改关闭(我们不需要修改原来的其它类的代码)。

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I'mAileen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值