首页 > 其他分享 >软件设计原则—开闭原则

软件设计原则—开闭原则

时间:2024-05-19 16:40:38浏览次数:27  
标签:输入法 原则 软件设计 皮肤 public sougou skin 开闭 AbstractSkin

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

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

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

抽象方法定义的就是规范

下面以 搜狗输入法 的皮肤为例介绍开闭原则的应用。

分析:搜狗输入法 的皮肤是输入法背景图片、窗口颜色和声音等元素的组合。用户可以根据自己的喜爱更换自己的输入法的皮肤,也可以从网上下载新的皮肤。

这些皮肤有共同的特点,可以为其定义一个抽象类AbstractSkin,而每个具体的皮肤例如defaultSkindiySkinAbstractSkin的子类。用户窗体可以根据需要选择或者增加新的主题,而不需要修改原代码,所以它是满足开闭原则的。

image

sougou

package com.lmcode.principles.opencloseprinciple;

public class sougou {
    private AbstractSkin skin;

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

AbstractSkin

package com.lmcode.principles.opencloseprinciple;

// 抽象皮肤类
public abstract class AbstractSkin {
    // 显示皮肤
    public abstract void display();
}

defaultSkin

package com.lmcode.principles.opencloseprinciple;

// 默认皮肤类
public class defaultSkin extends AbstractSkin{
    @Override
    public void display() {
        System.out.println("默认皮肤使用成功");
    }
}

diySkin

package com.lmcode.principles.opencloseprinciple;

// 默认皮肤类
public class diySkin extends AbstractSkin{
    @Override
    public void display() {
        System.out.println("自定义皮肤使用成功");
    }
}

main

package com.lmcode.principles.opencloseprinciple;

public class main {
    public static void main(String[] args) {
        // 创建搜狗输入法对象,皮肤对象
        sougou sougou = new sougou();
        defaultSkin skin = new defaultSkin();
        // 将皮肤设置到输入法中
        sougou.setSkin(skin);
        // 显示皮肤
        sougou.display();
    }
}

如果此时有新皮肤,只需要新增皮肤类实现皮肤抽象类即可。

标签:输入法,原则,软件设计,皮肤,public,sougou,skin,开闭,AbstractSkin
From: https://www.cnblogs.com/lm02/p/18200464

相关文章

  • 软件设计师(中级) 笔记
    软件设计师「学习路线」(推荐该顺序学习,按照先易后难排序)1、上午题—计算机系统(5~6分)1.cpu:cpu是硬件系统的核心功能:控制器(程序控制,操作控制)运算器(时间处理,数据处理)运算器:算术逻辑单元(ALU):实现算术运算和逻辑运算......
  • 设计原则
    单一功能原则:它规定一个类应该只有一个发生变化的原因,即一个类/方法只干一件事。开闭原则:对于扩展是开放的,但是对于修改是封闭的,这意味着在不修改一个软件实体的基础上去扩展其功能。依赖倒置原则:要底层实现尽量依赖抽象类与接口,方便系统间的解耦,有利于扩展与维护。合成复用原......
  • 项目管理十二原则
    价值驱动的项目管理知识体系第七版是新的基于价值的一个项目管理体系。包括了基于过程的项目管理,也包括了这个基于价值的新的项目管理体系。十二原则就是项目经理看待项目管理的十二个角度,十二个底线项目管理原则国家原则就是绝对不能突破的。什么是原则?原则属于价......
  • 不可变(immutable)设计原则
    我们先从Java的数据类型与类型检查说起数据类型数据类型是什么?数据类型是一组值以及可以对其执行的操作,比如:-boolean:Truthvalue(trueorfalse)-int:Integer(0,1,-47)-double:Realnumber(3.14,1.0,-2.1)-String:Text("Hello","example")而变量就是用特......
  • 软件设计师基础学习 十三
    十三、结构化开发方法13.1*系统分析与概述1,认识、理解当前的环境,获得当前系统的“物理模型”2.从当前系统的“物理模型”抽象出当前系统的“逻辑模型”3.对当前系统的“逻辑模型”进行分析和优化,建立目标系统的“逻辑模型”4.对目标系统的逻辑模型具体化(物理化),建立目标系......
  • 软件设计师基础学习 十四
    十四、面向对象技术14.1面向对象开发概念:对象:由数据及其操作所构成的封装体,是系统中用来描述客观事务的一个实体,是构成系统的一个基本单位。一个对象通常可以由对象名、属性和方法3个部分组成类:现实世界中实体的形式化描述,类将该实体的属性(数据)和操作(函数)封装在一起......
  • [实验感悟] 系列(1) 野外实验要遵循的几个原则
    关键词:野外实验、学生、遥感实验、种苗表型作者:ludwig1860日期:2024.5.15印象中有2年多没有亲自带学生野外实验了,甚至之前从来没有带学生进行过一次完整地、系统地、历经实验设计-方案制定-仪器准备-方法学习-细致考虑-野外实践-数据整理-数据处理整套流程的实验......
  • 软件设计模式概念篇
    创建型模式1、创建型模式(CreationalPattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。2、为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不需要清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。3、创建型......
  • 软件设计师基础学习 十二
    十二、项目管理12.1范围管理范围管理确定在项目内包括什么工作和不包括什么工作,由此界定的项目范围在项目的全生命周期内可能因种种原因而变化,项目管理范围也要管理项目范围的这种变化。项目范围的变化也叫变更对项目范围的管理,是通过5个管理过程来实现的:规划范围管理(编制......
  • 安全设计原则
    安全设计原则一、安全原则的名称1.网站链接https://wk.baidu.com/view/cd58cce501d276a20029bd64783e0912a2167c9e?pcf=2&fr=aladdin267&bfetype=new&_wkts_=1710312965912https://wk.baidu.com/view/c5120f5856270722192e453610661ed9ad515537?pcf=2&fr=aladdin267&bfet......