设计模式概述

2023-11-18

设计模式的重要性

  1. 以实际工作举例: 给用户开,开发完成后客户增加新的功能,例如原本程序适配两个产品,增加第三个产品(程序可扩展性)
  2. 程序开发完成后的后续维护(规范性,可读性)
  3. 总结: 高内聚,低耦合,可维护性,可扩展性,

类与类之间的关系

  1. 依赖: 类A中用到了类B 则为依赖关系(类B在类中以成员变量,方法形参,方法返回值存在,或在方法中使用到了)
  2. 泛化: 继承关系,特殊的依赖
  3. 实现: 实现接口关系,特殊的依赖
  4. 关联: 又分为单向,多向,一对一,一对多,多对多等,例如类A在类B中一属性存在,类B中没有类A,则为单向,类A又是类B的属性则是多向,若属性是一个集合等则是一对多,例如学生与老师则是多对多
  5. 聚合与组合关系: 特殊的关联关系, 例如类A是类B的属性,在类B中new创建出来,随着类B的消失而消失,类B与类A则是组合关系,如果类A在类B中不会随着类B的消失而消失则可以看为是聚合关系,具体要看在哪个角度去区分,如果在Persion里面的id是属性,不是通过new创建的,删除了这个Persion,这个id存在也就没什么意义了

设计模式的七大原则

  1. 单一职责原则: 一个类负责一项职责,例如xxxDao,只是xxx表对应的类,降低代码复杂度,提高类的可读性,可维护性,降低修改带来的风险(类级别,方法级别,代码级别)
  2. 接口隔离原则: 框架工作中,创建接口,创建接口实现类,编写方法,假设有其他类需要用到这个方 法,将接口注入到这个类中,通过接口去调用,将接口拆分,创建不同的类,去实现指定的接口,而不是将所有方法写在同一个接口中,其它类去实现这个接口需要重写用不到的方法
  3. 依赖倒转原则: 面向接口编程, 细节依赖抽象, 功能模块尽量使用抽象类或接口,通过该类的接口或抽象类注入,调用,利于程序的扩展(假设某个功能需要更改时,只需要更改其实现方法,或重写实现类继续继承这个接口,其调用方可以不用更改),依赖传递的三种方式: 接口传递(接口A中有抽象方法,该方法的形参为类B,类C实现接口A,并重写抽象方法,此时类C中就可以使用类B)构造器传递(A类需要使用B类, “new A(B b)” ), setter方法传递
  4. 里氏替换原则: 子类 extends 父类, 在带来便利的同时也存在弊端,例如重写父类方法会增加代码的耦合度,修改父类的方法时必须考虑对子类的影响,进而提出了里氏替换原则,也就是子类尽量不要重写父类方法,类A需要使用类B,或者重写类B中的方法,此时可以创建一个公共的base接口,A与B作为同级别的存在,通过聚合,组合,依赖来解决继承父类重写父类方法出现的问题, 就可以减少代码耦合
  5. 开闭原则ocp(核心): 提供方而言扩展开放, 调用方而言修改关闭, 假设或增加新的需求,对提供该功能的方法进行扩展,例如增加条件判断等,不修改原的调用方? 创建公共的抽象类或接口,原有功能与新功能继承这个公共的抽象,根据需求进行各自的实现,调用方通过接口进行调用,不用修改
  6. 迪米特法则: 最少知道原则,至于直接朋友通信,什么是直接朋友: 假设类A在类B中以成员变量,方法形参,方法返回值的形式进行引用,那么类A与类B为朋友关系,在类B的方法体中通过new创建出类B的实例,这种可以成为陌生关系,尽量避免陌生关系,在自己的类中完成自己的工作,降低类与类的耦合关系
  7. 合成复用原则 : 尽量使用合成,聚合的方式而不是继承的方式,假设类A使用类B的方法,不要用类A去继承类B,方式一: 类B作为类A的方法形参,在类A的方法中通过形参调用,方式二: 类B作为类A的属性,通过属性调用;方式三: 类A提供一个带参构造,类B作为类A的构造器参数,在实例化类A时传递一个类B
    总结设计原则的核心: 面向接口编程,高内聚低耦合,可能变化的业务代码与功能代码进行剥离

设计模式的分类

  1. 创建型模式: 关注与对象的创建, 单例模式, 抽象工厂模式, 原型模式, 建造者模式, 工厂模式
  2. 结构型模式: 关注与软件结构,软件的伸缩性,扩展性, 适配器模式, 桥接模式, 装饰模式, 组合模式, 外观模式, 享元模式, 代理模式
  3. 行为型模式: 关注与方法行为, 模板方法模式, 命令模式, 访问者模式, 迭代器模式, 观察者模式, 中介者模式,备忘录模式, 解释器模式, 状态模式, 策略模式, 责任链模式

设计模式的学习步骤

1.分析传统功能实现(不考虑设计模式的情况下) 与使用xxx设计模式的区别
2. xxx设计模式是什么,解决了什么问题,优缺点
3. 分析xxx设计模式中各个不同角色的作用
4. 在框架中(Spring),哪里使用到了该设计模式,源码分析

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

设计模式概述 的相关文章

随机推荐

  • c++智能指针

    C 智能指针详解 C 有四个智能指针 auto ptr unique ptr shared ptr weak ptr 其中后三个是C 11支持 第一个已经被C 11弃用 智能指针介绍 智能指针主要用于管理在堆上分配的内存 它将普通的指针封装
  • IP子网划分

    一 子网划分基础 需要掌握二进制与十进制之间的熟练转化 第一篇已经详细介绍过 二 IP地址组成及其分类 目前的IP地址是 IPv4 地址 1 IP地址有两部分组成 网络号码字段 net id 用于区分不同网络 主机号码字段 host id
  • HarmonyOS基础答疑

    本帖收录 HarmonyOS开发者交流群 常见的问题答疑 另外有相关问题可以补充到本帖 Q1 如何获取DevEco Studio 2 0 版本计划 获取方式 答 现在起 可在HarmonyOS官网上 下载HarmonyOS应用开发IDE D
  • 如何让PowerShell显示中文不乱码

    如今软件日益国际化的今天 Windows下的命令行却还顽固地使用本地编码来显示数据 这导致用UTF 8编码的文件在命令行显示乱码 虽说Cygwin的内核cygwin1 dll有自动转换功能 可是因为GB2312中没有变音符号等特殊字符 某些
  • CGI的基本定义和优劣势是什么

    通用网关接口 CGI 是网络服务器之间的交集 通过它可以在外部应用程序和服务器之间进行标准化数据交换 它属于现存最古老的在线界面技术 至今仍被一些知名虚拟主机提供商使用 使用CGI 时 HTML页面不需要存储在服务器上 而是可以在用户进行网
  • 总结几个C语言小程序

    一 打印正方形 该程序通过用户输入一个正方形的边长 L 然后利用嵌套的 for 循环来打印出具有边框的正方形图案 程序如下 include
  • mybatis xml文件中statementType类型

    xml文件示例如下
  • 根目录扩容(SUSE系列,版本1)

    LVM 方式 需求 给根目录和 oradata目录扩容 背景 1 可用闲置盘400G 2 web应用和数据库部在同台机器 3 应用所用目录为根目录 数据库用 oradata目录 4 计划给根100G oradata 300G磁盘大小 步骤
  • 那些好用过头的键盘

    目录 一 好键盘的重要性 二 关于keychron机械键盘 1 轴体部分 1 1 红轴 1 2 青轴 1 3 茶轴 1 4 黑轴 1 5 其他轴 2 性价比 2 1 外观 2 2 连接方式 2 3 轴体 2 4 摔打性 2 5 价格 三 总
  • 稿费一般多少钱一千字_写一篇1000字的稿子多少钱?一般

    目录 1 关于稿子代写 一般稿子分三种类型 第一种 原创稿子 第二种 转发稿子 第三种 书评稿子 这些都是主分类 当前每个主分类肯定会包含很多的子分类 如 翻译稿子 新闻稿子 演讲稿子 会议稿子 等等 当然稿子是有规定的书写格式 并不是随便
  • 使用cs与msf进行内网横向移动

    使用cs与msf进行内网横向移动 目标系统为 192 168 1 123 跳板主机为 192 168 1 118 一 使用cs探测内网 1 将目标上线至CS 2 使用cs探测内网信息 查看当前目标系统网络情况 确认目标系统所在内网网段 3
  • 王者荣耀战力查询的保姆级教程

    王者荣耀段位水平是可以直接看到的 但是荣耀战力才是衡量玩家实力的标准 因为各种排行榜 甚至是职业选手选拔也是看这个荣耀战力的 战力系统可以决定玩家所在区域的排名 并发放牌子 这也是是想展示的一种 那有些玩家所在区域玩家较多 那竞争自然而然地
  • 浅谈自然语言处理(NLP)学习路线(一)--- 概述

    资料汇总 引流 大道至简之机器学习系列 流畅的python https pan baidu com s 1l5Tl0yZS0NTixAilH9S2aQ 提取码 38qa 统计学习方法第二版 https pan baidu com s 18p
  • 一个不错的选色网站

    http 0to255 com 转载于 https www cnblogs com sofire archive 2010 10 12 1849141 html
  • Kali-加密文档Office破解-hashcat(字典)

    利用office2john py 导出word的hash值 office2john py YD xls gt hash txt 修改hash内容 cat hash txt gedit hash txt 破解 m 哈希值类型 hashcat
  • 狂神Redis学习笔记(已更完)

    Nosql概述 一 缓存的发展历史 1 MySQL单机时代 90年代 当时一个基本的网站访问量一般不会太大 单个数据库完全够用了 那个时候 更多使用静态网页html 服务器根本没有太大的压力 这种情况下 整个网站的瓶颈是什么 数据量如果太大
  • [SDOI2008]洞穴勘测【LCT维护联通关系】

    题目链接 LCT判断两点联通的这样的一个基础问题 因为不存在环 所以直接LCT维护连接关系即可 include
  • MySQL-DML语句

    DML语句 Create 单行插入数据 多行插入数据 插入否则更新 replace into 查看受影响行数的函数 Retrieve 全列查询 指定列查询 select 函数 表达式 对查询出的列重命名 as distinct order
  • 21 单例模式

    1 定义 单例模式 保证一个类仅有一个实例 并提供一个访问它的全局访问点 单例模式的使用场景 只要一个实例 例如一个Web页面上的计数器 可以不用把每次刷新都记录到数据中 使用单例模式保持计数器的值 并确保是线程安全的 创建一个对象需要消耗
  • 设计模式概述

    设计模式的重要性 以实际工作举例 给用户开 开发完成后客户增加新的功能 例如原本程序适配两个产品 增加第三个产品 程序可扩展性 程序开发完成后的后续维护 规范性 可读性 总结 高内聚 低耦合 可维护性 可扩展性 类与类之间的关系 依赖 类A