Java设计模式总叙

news2024/11/28 10:48:36

文章目录

    • 基本概念
    • 设计模式的七大原则
    • 设计模式有哪些
    • 高频使用&经典的设计模式
      • 创建型-工厂方法模式
      • 创建型-建造者模式
      • 结构型-代理模式
      • 结构型-外观模式
      • 行为型-策略模式
      • 行为型-模板方法
    • 补充
      • UML类图关系
    • 参考

基本概念

使得代码编写真正工程化,它是软件工程的基石。

设计模式的七大原则

  1. 开闭原则:对扩展开放、对修改关闭。
  2. 单一指责原则:一个类只做一件事。
  3. 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体
  4. 迪米特原则:高内聚,低耦合。
  5. 接口隔离原则:应该使用多个接口,而不是用单一的总接口,降低接口之间的耦合度与依赖。
  6. 合成复用原则:尽量使用组合/聚合的方式,而不是使用继承。
  7. 里氏替换原则:子类可以扩展父类的功能,但不能改变原有的功能。

设计模式有哪些

设计模式分为三大类:

  • 创建型模式:共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
  • 结构型模式:共7种:适配器模式、装饰器模式、代理模式、桥接模式、外观模式、组合模式、享元模式
  • 行为型模式:共11种:策略模式、模板方法模式、观察者模式、责任链模式、访问者模式、中介者模式、迭代器模式、命令模式、状态模式、备忘录模式、解释器模式

高频使用&经典的设计模式

创建型-工厂方法模式

符合开闭原则:扩展时,工厂类无需修改,仅需添加具体类即可。

创建型-建造者模式

将产品的创建与产品本身分离开来,使得同样的构建过程可以创建不同的对象;并且每个具体建造者都相互独立,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。

结构型-代理模式

  • 通过代理对象来访问真实对象。
  • 用于协调与连接调用者(即客户端)和被调用者(即目标对象。
  • 在一定程度上降低了系统的耦合度,同时也保护了目标对象。

结构型-外观模式

外观模式适用于为复杂子系统提供一个简单接口,提高系统的易用性场景以及引入外观模式将子系统与客户端进行解耦,提高子系统的独立性和可移植性。

行为型-策略模式

  • 优点在于可以动态改变对象的行为。
  • 缺点是会产生很多策略类,并且策略模式的决定权在用户,系统只是提供不同算法的实现,所以客户端必须知道所有的策略类,并自行决定使用哪一个策略类。

策略模式适用场景:

  • 场景A:应用程序需要实现特定的功能服务,而该程序有多种实现方式使用,所以需要动态地在几种算法中选择一种
  • 场景B:一个类定义了多种行为算法,并且这些行为在类的操作中以多个条件语句的形式出现,就可以将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。

行为型-模板方法

模板方法是基于继承实现的,在抽象父类中声明一个模板方法,并在模板方法中定义算法的执行步骤(即算法骨架)。在模板方法模式中,可以将子类共性的部分放在父类中实现,而特性的部分延迟到子类中实现,只需将特性部分在父类中声明成抽象方法即可,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤,不同的子类可以以不同的方式来实现这些逻辑。

  • 父类:实现共性部分,定义特性部分为抽象方法(可称为执行步骤)。
  • 子类:实现特性部分。
  • 优点在于符合“开闭原则”,实现代码复用,将不变的行为转移到父类,去除子类中的重复代码
  • 缺点在于不同的实现都需要定义一个子类,导致类的个数的增加使得系统更加庞大,设计更加抽象。

补充

UML类图关系

https://img-blog.csdnimg.cn/e134c4f03bdf4877aecc47103f996914.png#pic_center

参考

  • https://blog.csdn.net/a745233700/article/details/83625236
  • https://blog.csdn.net/sumengnan/article/details/113689824

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

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

相关文章

【cuda入门系列】通过代码真实打印线程ID

【cuda入门系列】通过代码真实打印线程ID1.gridDim(6,1),blockDim(4,1)2.gridDim(3,2),blockDim(2,2)【cuda入门系列之参加CUDA线上训练营】在Jetson nano本地跑 hello cuda! 【cuda入门系列之参加CUDA线上训练营】一文认识cuda基本概念 【cuda入门系列之参加CUDA线…

ubuntu 20使用kubeadm安装k8s 1.26

步骤 机器:4核8G,root账号,可访问互联网 1、更新apt apt-get update 2、安装一些基本工具 apt-get install ca-certificates curl gnupg lsb-release net-tools apt-transport-https 3、ifconfig 获取ip,hostname获取主机名&…

【洛谷】P1195 口袋的天空

明显看出为最小生成树,那么:难点在哪里呢?if(cntn-k)//******{flag1;break;}为什么是cntn-k呢而不是k呢?!!!解释:(如果每个已经连在一起了就不能分开,不管多少…

【Kafka】【二十二】Kafka中Controller,Rebalance,HW,LEO的概念

Kafka中Controller,Rebalance,HW,LEO的概念 Controller 集群中谁来充当controller 每个broker启动时会向zk创建⼀个临时序号节点,获得的序号最⼩的那个broker将会作为集群中的controller,负责这么⼏件事:…

基于距离模型SE

知识表示 one-hot representation: 将研究对象表示为向量,该向量只有某一维度非零,其他维度上的值均为零。独热表示是信息检索和搜索引擎中广泛使用的词袋模型的基础,优点是无需学习过程。简单高效,在信息检索和自然语言处理中得…

亚马逊云科技助力滴普科技,加速企业数据价值洞察

随着企业数字化转型的不断深入,数据对于业务的价值和重要性也逐渐凸显。越来越多企业意识到,只有不断提升底层数据基础平台的性能和能力,才能构建数据驱动的业务,增强企业核心竞争力。作为湖仓一体数据智能基础软件独角兽企业&…

开学必备数码清单,大学生开学必备数码好物分享

还有很多小伙伴不知道开学应该准备什么,在学校当中需要用到的数码产品,在宿舍娱乐使用的音箱、学习当中使用到的笔记本,这些都是我们可以准备的,还有一个小众的好物,能够让我们在学校当中提升生活的幸福感,…

MinIO-rpm离线安装

近日,由于客户的系统运行环境在一个封闭的网络内,不能与互联网联通,也不能提供yum库,所以运行环境只能采用rpm离线安装的方式,我总结了一下本次的安装经过,希望对需要的人有所帮助。一、单机安装1.下载http…

postgres 源码解析49 Btree节点分裂点确认流程--2

上篇讲解了分裂的规则和填充策略等内容,而本文着重讲解postgres Btree分裂点确认流程,接口函数为 _bt_findsplitloc。相关知识点见回顾:postgres源码解析48 Btree节点分裂点确认流程–1 执行流程 _bt_findsplitloc 该函数的功能是确定该分裂…

金三银四一线大厂常见Java面试题面试题总结 1000+ 面试题

Java 面试八股文有必要背吗? 我的回答是:很有必要。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。现如今,Java 面试的本质就是八股文,把八股文面试题背好,面试才有可能表现好。…

2020年欧空局10米土地覆盖数据

土地覆盖数据是我们平时最常用的地理数据之一,土地覆盖数据的来源也有很多种,之前我们介绍共过两个的30米精度的土地覆盖数据,分别为GlobeLand30土地覆盖数据和CLCD土地覆盖数据,(可查看之前推送的文章)&am…

Linux:用户空间非法指针coredump简析

1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 背景 本文分析基于 ARM32 架构,Linux-4.14 内核代码。 3. 问题分析 3.1 测试范例 void main(void) {*(int *)0 8; }运行程序会 …

Seata-Server分布式事务原理加源码 (七) - TCC事务模式

TCC事务模式 首先我们先来了解常规的TCC模式。 什么是TCC TCC 是分布式事务中的二阶段提交协议,它的全称为 Try-Confirm-Cancel,即资源预留(Try)、确认操作(Confirm)、取消操作(Cancel&#…

CV——day77 简读论文:视频中交通标志的跟踪检测

视频中交通标志的跟踪检测Detection-by-tracking of traffic signs in videos1 Introduction3 Methods3.1 Faster R-CNN3.2 Proposed shortest-path approach3.3 Tractor-based method3.4 IoU-based method6 ConclusionsDetection-by-tracking of traffic signs in videos 视频…

除了ChatGPT,还能用什么计划管理软件提高效率?

最近一段时间,人工智能工具ChatGPT成为互联网科技圈的热门话题。正如当年的阿尔法狗给世界带来的震动一样,人们讨论的最多的就是:ai智能会不会取代人工,因为ai的效率太高了,但再智能,也有ai永远也取代不了的…

ROS2机器人编程简述humble-第四章-IMPROVED DETECTOR .4

ROS2之TF2小练习-颜色随机器人和障碍物直接距离变化ROS2之TF2小练习-有哪些bug找找看里面给出了:ROS2机器人编程简述humble-第四章-BASIC DETECTOR .3需要改进哪些地方呢?检测之后,距离不变了……如何变化?这个问题可以问chatgpt吗…

【Linux】TCP并发网络编程

多线程网络编程 上一节我们讲到,当我们的多个客户端区连接同一个服务端的时候就会出现问题,这是因为一个返回值只能接收一个客户端传输的消息,那么我们想要多个客户端同时链接服务端,我们就要有这样一个思路,发过来一…

金三银四?铜三铁四才对吧......

往年的金三银四,今年被戏称为“铜三铁四”。知名的大厂HR们都在不断的裁员,能被保住不被裁掉可能就万事大吉了,赛道越来越窄,都在预测未来计算机行业是不是下一个土木工程? 我也算是软件测试岗位的老鸟了,…

2.6 尚品汇 day13 二级路由 饿了么ui 表单使用以及验证(不完整)、上线后的跨域代理(nginx)

二级路由 1.1路由结构 1.2 引入二级路由 1.2.2配置路由信息 1.3 声明导航 1.4配置路由出口 饿了么ui 表单使用以及验证 使用 1.1.1复制结构 1.1.2 在main.js 按需引入 引入首字母大写,-用大写替代,el省略,一定要引用完整 注意Vue.compon…

Smartbi观点 | ChatGPT还处于初级阶段?然而AI早已打入BI内部

最近,当我们还沉浸在电影《流浪地球2》MOSS所带来的震感时,ChatGPT又火爆社交媒体,成为全球“新顶流”。 官方数据显示,今年1月,平均每天约有1300万独立访客使用 ChatGPT,累计用户超1亿,创下了互…