设计模式(1)

2023-05-16

设计模式的作用

  1. 代码重用性

  2. 可读性

  3. 可扩展性

  4. 可靠性

  5. 使程序呈现高内聚,低耦合的特性

设计模式常用的七大原则有

  1. 单一职责原则

  2. 接口隔离原则

  3. 依赖倒转原则

  4. 里式替换原则

  5. 开闭原则OCP

  6. 迪米特法则

  7. 合成复用原则

单一职责原则

​ 对类来说的,即一个应该只负责 项职。如类 A负责两个不同职 :责两个不同职 :责1,职 责2。 当职 责1需求变更而改 变A时,可能造成职 责2执行错误, 所以需要将 类A的粒度分解 为 A1,A2

  • 降低类的复杂度,一个只负责项职。

  • 提高类的可读性,维护性

  • 降低变更引起的风险

  • 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单才可以在代码级违 反单一职责原则;只有类中方法数量足够少,可以在级别保持单一职责

  • 案例一

public class single {
    public static void main(String[] args) {
        Vehicle vehicle = new Vehicle();
        vehicle.run("摩托车!");
        vehicle.run("汽车!");
        vehicle.run("飞机!");
    }
}
//方法一中违反了单一原则

class Vehicle {
    public void run(String vehicle) {
        System.out.println(vehicle + "在公路上运行!");
    }
}

​ 飞机动作与摩托和汽车不符违反了单一原则

  • 案例二
public class single2 {
    @Test
    public static void main(String[] args) {
        RoadVehicle vehicle = new RoadVehicle();
        vehicle.run("摩托车!");
        vehicle.run("汽车!");
        AirVehicle airVehicle = new AirVehicle();
        airVehicle.run("飞机");
    }
}
//方法二遵守单一原则
//但浪费资源

class RoadVehicle {
    public void run(String vehicle) {
        System.out.println(vehicle + "在公路上运行!");
    }
}
class AirVehicle {
    public void run(String vehicle) {
        System.out.println(vehicle + "天空上运行!");
    }
}

​ 虽然遵守单一原则但浪费资源非常繁重

  • 案例三
public class single3 {
    @Test
    public static void main(String[] args) {
        Vehicle1 vehicle = new Vehicle1();
        vehicle.run("摩托车!");
        vehicle.run("汽车!");
        vehicle.run2("飞机");
        vehicle.run3("小船");
    }
}

class Vehicle1 {
    public void run(String vehicle) {
        System.out.println(vehicle + "在公路上运行!");
    }
    public void run2(String vehicle) {
        System.out.println(vehicle + "在天空上运行!");
    }
    public void run3(String vehicle) {
        System.out.println(vehicle + "在水中翱翔!");
    }
}

​ 这种修改方法没有对原来的类做大的修改,只是增加方法,在类级别没有遵守单一原则,但在方法上遵守单一原则

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

设计模式(1) 的相关文章

  • 【机器学习】数据增强(Data Augmentation)

    文章目录 一 引言 背景二 为什么需要数据增强 xff1f 三 什么是数据增强 xff1f 定义分类 四 有监督的数据增强1 单样本数据增强 xff08 1 xff09 几何变换类 xff08 2 xff09 颜色变换类 2 多样本数据增强

随机推荐

  • 基于FRFT的雷达辐射源信号特征分析及提取

    信号在FRFT域上表示 xff0c 同时包含了信号的时域信息和频域信息 论文中提出的算法流程如图 xff1a 步骤 xff11 xff1a 提取雷达辐射源信号脉冲序列的脉冲 xff0c 进行相应的预处理 xff0c 包括带宽和能量的归一化
  • 【Linux】查看、激活、退出虚拟环境以及 CommandNotFoundError 错误解决

    文章目录 一 虚拟环境有关命令二 CommandNotFoundError Your shell has not been properly configured to use 39 conda activate 39 参考链接 一 虚拟环
  • 【PyTorch】torch.utils.data.DataLoader 简单介绍与使用

    文章目录 一 torch utils data DataLoader 简介二 实例参考链接 一 torch utils data DataLoader 简介 作用 xff1a torch utils data DataLoader 主要是对
  • 【Python】np.unique() 介绍与使用

    文章目录 一 np unique 介绍二 np unique 原型三 实例参考链接 一 np unique 介绍 对于一维数组或者列表 xff0c np unique 函数 去除其中重复的元素 xff0c 并按元素 由小到大 返回一个新的无
  • 【Pytorch】交叉熵损失函数 CrossEntropyLoss() 详解

    文章目录 一 损失函数 nn CrossEntropyLoss 二 什么是交叉熵三 Pytorch 中的 CrossEntropyLoss 函数参考链接 一 损失函数 nn CrossEntropyLoss 交叉熵损失函数 nn Cross
  • 【Linux】rm 命令:删除文件/文件夹

    文章目录 一 删除文件 文件夹 xff1a rm 命令二 删除文件 xff08 即这个文件被删除 xff09 三 删除文件夹四 注意参考链接 一 删除文件 文件夹 xff1a rm 命令 rm 是强大的删除命令 xff0c 它可以 永久性地
  • 【Pytorch】torch.max() 函数详解

    文章目录 一 一个参数时的 torch max 1 函数介绍2 实例 二 增加指定维度时的 torch max 1 函数介绍2 实例 三 两个输入张量时的 torch max 1 函数介绍2 实例 参考链接 一 一个参数时的 torch m
  • 【机器学习】KNN 算法介绍

    文章目录 一 KNN 简介二 KNN 核心思想实例分析 xff1a K 值的影响 三 KNN 的关键1 距离计算1 闵可夫斯基距离2 曼哈顿距离3 欧氏距离4 切比雪夫距离5 余弦距离总结 2 K值选择 四 KNN 的改进 xff1a KD
  • 【机器学习】Radius Neighbors Classifier(rNN,radius nearest neighbors)

    文章目录 一 半径近邻分类器 简介二 半径近邻分类器算法三 Radius Neighbors Classifier With Scikit Learn参考链接 一 半径近邻分类器 简介 Radius Neighbors Classifier
  • 扫盲:单片机入门分享 晶振 复位电路与电源

    学单片机走过许多弯路 xff0c 挖过许多坑 xff0c 浪费了很多时间 xff0c 做过实际产品后回顾过去的学习经历 xff0c 发现很多坑其实是可以避免的 xff0c 单片机的入门应该可以更轻松一点 xff0c 借CSDN论坛一方宝地
  • VR技术原理分析,【VR原理入门理论篇】

    VR技术原理分析 xff0c VR原理入门理论篇 xff0c 学习研究VR技术必须要了解的理论知识 目录 1 VR沉浸感和交互作用产生的原理 xff1a 2 关于沉浸感和交互作用的定义 3 如何生成符合VR要求的虚拟世界 4 最主流的VR开
  • ST-Link驱动安装不正确,设备管理器黄色感叹号,win10安装stlink驱动

    这是由于驱动没有安装好导致的 xff0c 从该链接下载驱动文件 xff1a http pan baidu com s 1bog5FZ5 我是win10 win7 win8一样的办法 解压缩后 xff0c 直接以管理员身份运行其中的dpins
  • 使用CIDR计算划分子网个数

    概念 CIDR xff08 无类别域间路由 xff0c Classless Inter Domain Routing xff09 是一种IP地址划分的方法 xff0c 其目的是更加有效地使用IPv4地址空间 CIDR的原理是将一个IP地址划
  • 关于字符串的长度和大小的定义

    char a 61 aaaaa 字符串长度为5 xff0c 数组长度 xff08 大小 xff09 为6 xff1b char b 5 61 aaaaa 字符串长度不确定 xff0c 数组长度 xff08 大小 xff09 为5 xff1b
  • 用安卓设备识别ArUco码

    先来看下效果 静态图片中的ArUcon码识别 在之前程序的基础上再添加一个Button和TextView xff0c 点击 识别 按钮检测照片中的ArUco码后 xff0c 在屏幕最下方显示识别到的ArUco的id和四个角点坐标 xff0c
  • VSCode集成Git

    VSCode集成Git流程 一 xff0c 下载git并配置环境变量 1 从git官网下载一个git安装包 xff0c 官网下载地址 git下载 2 下载完成后 xff0c 一路NEXT走下去 xff0c 只需注意下面这几个页面的配置 xf
  • Vscode使用clang-format格式化代码

    使用Vscode格式化代码 使用Vscode格式化代码操作步骤 使用Vscode格式化代码 可以在vscode上使用clang format对C C 43 43 代码自动格式化 xff0c 配置自己想要的格式规范 xff0c 解脱代码格式的
  • 二维数组转稀疏数组的思路

    二维数组转稀疏数组的思路 遍历 原始的二维数组 xff0c 得到有效数据的个数sum根据sum就可以创建稀疏数组sparseArr int sum 43 1 3 将二维数组的有效数据存入到稀疏数组 span class token comm
  • 实例方法和静态方法常识

    1 调用方式上 静态方法依赖于类 xff0c 通过类 静态方法调用 xff1b 实例方法依赖于类的对象 xff0c 需要创建对象后 xff0c 对象 实例方法使用 2 使用上 实例方法内部不能定义静态变量 xff0c 会出现编译错误 xff
  • 设计模式(1)

    设计模式的作用 代码重用性 可读性 可扩展性 可靠性 使程序呈现高内聚 xff0c 低耦合的特性 设计模式常用的七大原则有 单一职责原则 接口隔离原则 依赖倒转原则 里式替换原则 开闭原则OCP 迪米特法则 合成复用原则 单一职责原则 对类