首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【AI与设计模式:开闭原则的创新之旅】

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

作者头像
ImAileen
发布2024-12-22 16:50:26
发布2024-12-22 16:50:26
15200
代码可运行
举报
运行总次数:0
代码可运行

软件设计原则

软件开发最重要的是提高软件的可维护性,可复用性,可扩展性,灵活性,所以在开发过程中我们要根据以下六个原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。

开闭原则

开闭原则的含义

  • 开闭原则对扩展开发,对修改关闭。 在进行拓展的时候,不能修改原有代码,实现一个热插拔效果。使得程序扩展性好,易于维护和升级。

开闭原则的实现及效果

  • 效果实现: 抽象类和接口。
  • 因为抽象灵活性好,适应性广,只要抽象合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。
    • 下面以搜狗输入法为例,介绍开闭原则:
  • 分析:搜狗输入法的皮肤是输入法背景图片、窗口颜色和声音等元素的组合。用户可以根据自己的喜爱更换自己的输入法的皮肤,也可以从网上下载新的皮肤。这些皮肤有共同的特点,可以为其定义一个抽象类(AbstractSkin),而每个具体的皮肤(DefaultSpecificSkin和XiantiaoxiaogouSkin)是其子类。用户窗体可以根据需要选择或者增加新的主题,而不需要修改原代码,所以它是满足开闭原则的。

上图中默认皮肤和线条小狗皮肤都继承了抽象皮肤这个类,并且重写了display()这个方法;搜狗输入法与抽象皮肤之间是关联关系,表示搜狗输入法依赖于抽象皮肤这个类,也就是说搜狗输入法中有一个抽象皮肤类型的成员变量skin,这意味着SouGouInput可以与任何AbstractSkin的实例关联。

具体代码实现

  • 代码实现
代码语言:javascript
代码运行次数:0
运行
复制
package principles.open_close;


/**
 * @Description:抽象皮肤类
 */
public abstract class AbstractSkin {
    //显示的方法
    public abstract void display();
}
代码语言:javascript
代码运行次数:0
运行
复制
package principles.open_close;

/**
 * @Description:默认皮肤类
 */
public class DefaultSkin extends AbstractSkin{
    public void display(){
        System.out.println("默认皮肤");
    }
}
代码语言:javascript
代码运行次数:0
运行
复制
package principles.open_close;
/**
 * @Description:线条小狗皮肤类
 */
public class Xiantiaoxiaogou extends AbstractSkin{
    public void display()
    {
        System.out.println("线条小狗皮肤");
    }}
代码语言:javascript
代码运行次数:0
运行
复制
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();
    }
}
代码语言:javascript
代码运行次数:0
运行
复制
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();
    }
}
  • 根据运行结果,我们可以看到,当我们需要换皮肤时只需要创建对应的皮肤对象,并调用对应的方法即可使用。
  • 如果我们要拓展新皮肤则可以创建新的皮肤类,然后继承抽象皮肤,如下代码所示:
代码语言:javascript
代码运行次数:0
运行
复制
package principles.open_close;

public class Lanyangyang extends AbstractSkin{
    public void display(){
        System.out.println("这里是懒羊羊皮肤");
    }
}
代码语言:javascript
代码运行次数:0
运行
复制
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();
    }
}

总结

  • 总结: 从上面我们就能深刻的体会到开闭原则,就是对拓展开发(比如说我们要拓展新的皮肤),对修改关闭(我们不需要修改原来的其它类的代码)。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 软件设计原则
  • 开闭原则
  • 开闭原则的含义
  • 开闭原则的实现及效果
  • 具体代码实现
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档