JAVA【设计模式】开闭原则

2023-11-01

一、设计模式的规范

设计模式遵循六⼤原则;单⼀职责( ⼀个类和⽅法只做⼀件事 )、⾥⽒替换( 多态,⼦类可扩展⽗类 )、依赖
倒置( 细节依赖抽象,下层依赖上层 )、接⼝隔离( 建⽴单⼀接⼝ )、迪⽶特原则( 最少知道,降低耦合 )、开闭
原则( 抽象架构,扩展实现 )
,会在具体的设计模式章节中,进⾏体现。

二、开闭原则

定义:软件中的对象(类、模块、函数等等),对于扩展开放,对于修改是关闭
在这里插入图片描述

三、示例

模拟场景:架构师已经定义了一套关于计算长方形、三角形、圆面积函数,普遍适用于公司。这天你接到了一个特殊需求,需要精确计算圆的面积,需要对架构师已有的计算圆面积函数上做修改,架构师告诉你:你只需要继承我写好的类,重写计算圆面积方法,你豁然开朗…

开闭原则设计

计算长方形、三角形、圆面积接口:ICaculateArea

package com.qf.principle.openandclose;

public interface ICaculateArea {

    /**
     * 长方形面积
     * @param x 长
     * @param y 宽
     * @return  面积
     */
    double rectangle(double x,double y);

    /**
     * 三角形面积
     * @param x 边长x
     * @param y 边长y
     * @param z 边长z
     * @return  面积
     */
    double triangle(double x,double y,double z);

    /**
     * 圆面积
     * @param r 半径
     * @return  面积
     */
    double circle(double r);
}

架构师所实现的普适性计算类:CaculateArea

package com.qf.principle.openandclose.impl;

import com.qf.principle.openandclose.ICaculateArea;

public class CaculateArea implements ICaculateArea {

    private final double π=3.14D;
    @Override
    public double rectangle(double x, double y) {
        return x*y;
    }

    @Override
    public double triangle(double x, double y, double z) {
        double p=(x+y+z)/2;
        return Math.sqrt(p*(p-x)*(p-y)*(p-z));
    }

    @Override
    public double circle(double r) {
        return π*r*r;
    }
}

继承架构师写好的类,重写计算圆面积方法:CaculateAreaExtion

package com.qf.principle.openandclose.impl;

public class CaculateAreaExtion extends CaculateArea{
    private  final double π=3.14159265359D;

    @Override
    public double circle(double r) {
        return π*r*r;
    }
}

UML关系图

在这里插入图片描述
总结:
开闭原则使程序变得更加容易被维护和扩展

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA【设计模式】开闭原则 的相关文章

随机推荐

  • C++11容器中新增加的emplace相关函数的使用

    C 11中 针对顺序容器 如vector deque list 新标准引入了三个新成员 emplace front emplace和emplace back 这些操作构造而不是拷贝元素 这些操作分别对应push front insert和p
  • Spark一路火花带闪电——Spark底层原理介绍

    文章目录 Spark计算引擎原理 1 1 术语 1 1 1 Application Spark应用程序 1 1 2 Driver 驱动程序 1 1 3 Cluster Manager 资源管理器 1 1 4 Executor 执行器 1 1
  • python---闭包

    1 闭包理解 闭包定义 在函数嵌套的前提下 内部函数使用了外部函数的变量 并且外部函数返回了内部函数 我们把这个使用外部函数变量的内部函数称为闭包 2 必报的构成条件 在函数嵌套 函数里面在定义函数 的前提下 内部函数使用了外部函数的变量
  • 【Kaggle】【Output创建文件夹时“nameError: name ‘mkdir‘ is not defined”】

    文章目录 问题描述 解决方法 Reference 问题描述 想要手动设置Output的文件夹 便于结果保存及分类保存等 在一个cell中输入图2的命令 出现报错 解决方法 cell中不能有多余的东西 一句命令对应一个cell 多余的即使注释
  • 什么是ChatGPT?如何与ChatGPT高效交流?

    ChatGPT是一种基于语言模型的对话系统 由OpenAI开发 它建立在GPT Generative Pre trained Transformer 模型的基础上 在大规模语料库上进行了预训练 并通过与人类进行交互式对话来进行微调 一 什么
  • Python爬虫学多久才能接单?

    要学多久才能掌握爬虫技能并能够接单 这个因人而异 取决于学习的方式 时间和个人天赋 以下是一些学习建议 1 了解基础知识 在开始爬虫之前 确保您对HTML CSS JavaScript以及HTTP等基础编程和网络技术有所了解 2 学习编程语
  • 叶荣添给你的11条投机建议!

    一 刚则易折 至阴至柔是王道 凡事不可勉强股票也一样要学会知难而退 善于变化 既然大的趋势确定了就不必急于一时的涨跌 二 退却不代表放弃 暂时的放弃不代表今生不再回头 此句意味善于止损 在股票操作里风险第一 盈利第二 在操作交易的过程中永远
  • Qt中的窗口类

    文章目录 1 QWidget 1 QWidget 2 QDialog 2 1 QMessageBox 2 2 QFileDialog 2 3 QFontDialog 2 4 QColorDialog 2 5 QInputDialog 2 6
  • 三星被曝因ChatGPT泄露芯片机密!韩媒惊呼数据「原封不动」直传美国,软银已禁止员工使用......

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 点击进入 gt 计算机视觉 微信技术交流群 明敏 萧箫 发自 凹非寺转载自 量子位 QbitAI 三星引入ChatGPT不到20天 就发生3起数据外泄事件 其中2次和半
  • 不贴代码能说明白Jetpack LiveData原理吗(一)

    LifecycleOwner如何提供周期生命周期的变化 LifecycleObserver如何得知生命周期的变化 LiveData的背后隐藏了多少不为人知的秘密 这一切都要从观察者模式说起 起源 何为观察者模式 在代码中最直接的表现就是在事
  • Arcgis andoid开发之应用百度地图接口实现精准定位与显示

    怀着激动 兴奋的心情 在这个漫天柳絮的季节写下了这片博文 为什么呢 因为困扰我很久的一个技术性的问题得到了解决 发次博文 供大家参观 学习 同时 也以慰藉我长期困扰的心情 好了 废话不再 言归正传 看看这到底是个什么东西 首先 简单地介绍一
  • 设计模式---适配器模式

    适配器模式 基本介绍 适配器模式 Adapter Pattern 将某个类的接口转换成客户端期望的另一个接口表示 主的目的是兼容性 让原本因接口不匹配不能一起工作的两个类可以协同工作 其别名为包装器 Wrapper 适配器模式属于结构型模式
  • 基于Keras_bert模型的Bert使用与字词预测

    基于Keras bert模型的Bert使用与字词预测 学习参考杨老师的博客 请支持原文 一 Keras bert 基础知识 1 1 kert bert库安装 1 2 Tokenizer文本拆分 1 3 训练和使用 构建模型 模型训练 使用模
  • 计算机二级C语言题库(44套真题+刷题软件)第二套

    刷题软件 gongzhonghao 露露IT 1 某带链栈的初始状态为top bottom NULL 经过一系列正常的入栈与退栈操作后 top bottom 20 该栈中的元素个数为 A 1 B 0 C 20 D 不确定 本题的考查知识点是
  • 【Seaborn】绘图工具的魅力

    文章目录 1 seaborn简介 2 seaborn风格 3 seaborn调色板及颜色设置 4 seaborn绘图方式 1 单变量分析绘图 2 绘制双变量联合分布图 3 多变量关系分布图 1 seaborn简介 Seaborn在 Matp
  • pacemaker+corosync中crm命令用法

    注 本文来自 http www 111cn net sys linux 73074 htm 一 crm有两种工作方式 1 批处理模式 就是在shell命令行中直接输入命令 2 交互式模式 crm live 进入到crmsh中交互执行 二 命
  • DHCP协议的运行过程

    DHCP协议的运行过程 预热知识 DHCP协议是使用C S模式 DHCP服务器运行DHCP服务器进程 在用户主机上运行DHCP客户进程 简称为DHCP客户 DHCP协议是TCP IP应用层的协议 使用的是传输层的UDP所提供的服务 DHCP
  • 2022团体程序设计天梯赛题解 Python

    p1 签到题 print I m gonna win Today print 2022 04 23 p2 L1 2 种钻石 5 分 n v list map int input split print n v p3 L1 3 谁能进图书馆
  • Python三维绘图——Matplotlib

    菜鸡的第一篇博客 学习一下大佬的笔记 1 创建三维坐标轴对象Axes3D 方法一 利用关键字 projection 3D 来实现 方法一 利用关键字 objection 3d from matplotlib import pyplot as
  • JAVA【设计模式】开闭原则

    开闭原则 一 设计模式的规范 二 开闭原则 三 示例 开闭原则设计 UML关系图 一 设计模式的规范 设计模式遵循六 原则 单 职责 个类和 法只做 件事 替换 多态 类可扩展 类 依赖 倒置 细节依赖抽象 下层依赖上层 接 隔离 建 单