【设计模式】软件设计原则

news2024/9/22 23:22:40

1. 软件设计原则:

为了提高系统软件的可维护性、可复用性、可扩展性和灵活性

1.1 开闭原则:

对扩展开放,对修改关闭 (热插拔)

实现方式: 通过定义接口和实现类的方式实现开闭原则,我们再进行程序扩展时,不需要修改原代码,只需要再给该接口重新派生一个实现类即可

案例:

以搜狗输入法换皮肤为例,介绍开闭原则的使用

在这里插入图片描述

  1. 首先定义一皮肤抽象类,其他具体的皮肤实现类继承皮肤抽象类,重写其 display 展示方法
/**
 * @description: 搜狗输入法抽象皮肤类
 * @author: Liuwanqing
 * @date: 2022-11-17 13:12
 */
public abstract class AbstractSkin {
    public void display(){
        System.out.println("展示抽象皮肤");
    }
}
  1. 定义搜狗输入法默认皮肤类,继承抽象类,重写方法
/**
 * @description: 搜狗输入法默认皮肤类
 * @author: Liuwanqing
 * @date: 2022-11-17 13:14
 */
public class DefaultSkin extends AbstractSkin{
    public void display(){
        System.out.println("展示默认的皮肤");
    }
}
  1. 定义搜狗输入法自定义皮肤类,继承抽象类,重写方法
/**
 * @description: 我自定义的皮肤类
 * @author: Liuwanqing
 * @date: 2022-11-17 13:14
 */
public class WanqingSkin extends AbstractSkin{
    public void display(){
        System.out.println("展示我自定义的皮肤");
    }
}
  1. 定义搜狗输入法聚合类,其具有抽象类对象,并且具有展示方法
/**
 * @description: 搜狗输入法,用于聚合皮肤类
 * @author: Liuwanqing
 * @date: 2022-11-17 13:16
 */
public class SouGouInput {

    private AbstractSkin skin;

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

    public void display(){
        skin.display();
    }
}
  1. 定义测试类,即客户端调用类,其为聚合类设置皮肤,并调用 display 方法
/**
 * @description: 测试类
 * @author: Liuwanqing
 * @date: 2022-11-17 13:18
 */
public class Client {
    public static void main(String[] args) {
        SouGouInput souGouInput = new SouGouInput();
        DefaultSkin skin = new DefaultSkin();
        souGouInput.setSkin(skin);
        souGouInput.display();
    }
}

体会上述案例中展示出的开闭原则: 当我们的客户端需要新增一皮肤时,只需要重写一新的皮肤类,继承抽象皮肤类,我们只需要在客户端更换一下调用,而不需要修改原有代码,实现了对扩展开放,对修改关闭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASEMI代理艾赛斯IXTY02N50D-TRL车规级MOSFET

编辑-Z 艾赛斯车规级MOS管IXTY02N50D-TRL参数: 型号:IXTY02N50D-TRL 漏极-源极电压(VDS):500V 连续漏电流(ID):200mA 功耗(PD):25W 工作结温…

如何运营推特营销主账号

在推特上做产品推广,Twitter群(发)推王建议:一般需要两类账号。 主账号:也就是官方号,用来聚集粉丝,日常产品信息、新闻资讯发布的; 批量推广号:也叫小号或者广告号&am…

oracle数据库定义语言—DDL

文章目录1、数据定义语言2 创建表2.2 oracle 数据库中的表2.2.1 常见的数据字典表2.3 用查询创建表2.3.1 示例3 ALTER TABLE 语句3.1 添加一个新的列3.2 修改数据类型3.3 修改默认值3.4 修改列名3.5 删除一个列4、修改名称5、截断表6 、删除表(删除表以及表结构&…

《垃圾回收算法手册 自动内存管理的艺术》——引用计数与垃圾回收器的比较(笔记)

文章目录五、引用计数5.1 引用计数算法的优缺点5.2 提升效率5.3 延迟引用计数5.4 合并引用计数5.5 环状引用计数**步骤**5.6受限域引用计数六、垃圾回收器的比较6.1 吞吐量6.2 停顿时间6.3 内存空间6.4 回收器的实现6.5 自适应系统6.6 统一垃圾回收理论6.6.1 垃圾回收的抽象6.6…

神经网络在故障诊断中的应用

人工神经网络是近年来发展迅速,广泛地应用于各个领域,包括航天,自动控制,金融,电子,制造,医药等多个行业,已经有许多成功的先例,并展示了更为广阔的应用前景。基于神经网…

【区块链 | 智能合约】Ethereum源代码(8)- Ethereum服务和以太坊P2P协议发送广播源码分析

在“【区块链 | 智能合约】Ethereum源代码(2)- go-ethereum 客户端入口代码和Node分析”一文中,我们提到Ethereum作为一个service,被Node 注册进去。Node start的时候会启动其注册的所有服务,Ethereum service也是一样。 一、ethereum service的初始化和启动 func geth(c…

【MySQL数据库笔记 - 进阶篇】(二)索引

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:暂定 📝视频地址:黑马程序员 MySQL数据库入门到精通 📣专栏定位:这个专栏我将会整理 B 站黑马程序员的 MySQL…

day064:File类与I/O流、绝对路径与相对路径、File类的成员方法

目录 一、什么是File类、IO流 1.File类 2.I/O流 3.File类的构造方法 二、绝对路径与相对路径 三、File类的成员方法 1.File类的创建功能 (1)createNewFile() 创建空的文件 (2)mkdir() 创建单级文…

CY5.5(Cyanine5.5) azide, 10 mM/DMSO,花菁染料Cy5.5标记叠氮

产品名称:花菁染料Cy5.5标记叠氮 英文名称:CY5.5(Cyanine5.5) azide 该染料具有远红外/近红外发射,可用于NIR活体成像。Cyanine5.5可以取代Cy5.5、Alexa Fluor 680和DyLight 680。 CAS:2183440-52-8 分子式:C43H49ClN6O 分子量:701.36 …

简单工厂、工厂方法、抽象工厂、抽象工厂加简单工厂

简单工厂模式:简单工模式时类的创建模式,又叫做静态工厂方法(static Factory Method)。简单工厂模式是一个工厂对象决定创建出哪一种产品类的实例。它存在的目的很简单:定义一个创建对象的接口。简单工厂模式的最大优点…

Spring Boot之容器功能

目录 一.Spring 注入组件的注解 二.Configuration 1.代码演示 1.1JavaBean--》Monster.java 1.2配置类 1.3执行代码 2.Configuration 注意事项和细节 三.Import 1.创建两个JavaBean类 2.注入类 3.测试注解的使用 四.Conditional 1.Conditional 介绍 2.应用实例 …

攻防世界 看雪看雪看雪

看雪看雪看雪 题目附件里面给了张图 尝试文件拆解 无果 尝试放入winhex查找信息 无果 尝试放入stegsolve查找信息 无果 题目说雪 刚好有一种snow隐写的方法 但好像跟图片没有什么关系 后来发现存在ntfs流隐写 你解压之后也可以看到 这里我们使用7zip打开附件的压缩包…

【长难句分析精讲】同位语从句

分析技巧 形式: 抽象名词 that / whether形式: 具体名词 同位语(名词短语)如:成都,四川省会 练习一 一划二从三主 这里 and 不是关键词 苹果掉到地上而不是掉到树上这个事实,回答了他一直都…

【Jmeter基础篇】05:Linux服务器上部署并运行Jmeter脚本

配置之前请务必已安装JDK并配置好JDK的环境变量。 1. 上传压缩包到Linux服务器 使用FTP即可(最好是新建一个/usr/Application/Jmeter的文件夹,放进去。也可以使用自己喜欢的路径) # -p的作用是防止当上层文件夹不存在时报错。想体验的话可以…

Flink的六种物理分区策略

文章目录物理分区(Physical Partitioning)🍕1.随机分区(shuffle)🍔2.轮询分区(Round-Robin)🍟3. 重缩放分区(rescale)🌭4.广播&#x…

深度学习入门(三十八)计算性能——多GPU训练

深度学习入门(三十八)计算性能——多GPU训练前言计算性能——多GPU训练课件多GPU并行数据并行VS模型并行数据并行总结教材1 问题拆分2 数据并行性3 简单网络4 数据同步5 数据分发6 训练7 小结多GPU的简洁实现1简单网络2 网络初始化3 训练4 小结前言 核心…

因子特征工程:alphalens库深度解析

原创文章第107篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。 前面的文章我们把数据,因子定制,自动标注的功能都准备好了,今天继续因子分析,分析的框架当然还是alphalens。 星球有一期研报…

Babel插件指南

Babel插件指南 文章目录Babel插件指南Babel简介AST(Abstract syntax tree)简介ESTree AST NodeVisitors(访问者)Babel APIbabylonbabel-traversebabel generator项目中实践引用自定义的babel插件新增插件js文件确定要实现的功能,编译成AST进行…

绘制花朵-第13届蓝桥杯Scratch选拔赛真题精选

[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第78讲。 蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选…

OpenYurt v1.1.0: 新增 DaemonSet 的 OTA 和 Auto 升级策略

作者:昌蒲、侯雪城 边缘计算云原生平台、CNCF SandBox 项目 - OpenYurt [1 ] ,近期发布了 v1.1.0 版本。 OpenYurt 作为边缘云原生领域的开源项目,采用云管边的云边一体化架构,致力于解决云原生落地边缘计算场景的痛点问题。针对…