Java学习——设计模式——行为型模式1

news2024/11/19 10:34:37

文章目录

  • 行为型模式
    • 模板方法
    • 策略模式
    • 命令模式
    • 责任链模式

行为型模式

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,涉及算法与对象间职责的分配。


行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分配行为,后者采用组合或聚合在对象间分配行为。由于组合或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。

包括:
1、模板方法
2、策略模式
3、命令模式
4、职责链模式
5、状态模式
6、观察者模式
7、中介者模式
8、迭代器模式
9、访问者模式
10、备忘录模式
11、解释器模式

除了模板方法和解释器模式是类行为型模式,其余都是对象行为型模式

模板方法

定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。

结构
1、抽象类:给出算法轮廓和骨架

  • 模板方法:定义算法骨架,按顺序调用包含的基本方法
  • 基本方法:实现算法各个步骤的方法,是模板方法的组成部分。
    • 抽象方法:由抽象类声明、由其具体子类实现
    • 具体方法:由一个抽象类或具体类声明并实现,其子类可以进行覆盖也可以直接继承
    • 钩子方法:在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种

2、 具体子类:实现抽象类中所定义的抽象方法和钩子方法,是一个顶级逻辑的组成步骤
在这里插入图片描述
优点

  • 提高代码复用性
  • 实现反向控制
    通过一个父类调用子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控制,并符合“开闭原则”

缺点

  • 对每个不同实现都需要定义一个子类,导致类的个数增加,系统更加庞大,设计也更加抽象
  • 父类中的抽象方法由子类实现,子类的执行结果会影响父类的结果,这导致一种反向的控制结构,提高了代码阅读的难度

策略模式

定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的用户。
属于对象行为模式,通过堆算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象堆这些算法进行管理。

结构
1、抽象策略类
2、具体策略类
3、环境类

在这里插入图片描述
优点
1、策略类之间可以自由切换
2、易于扩展。增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码
3、避免使用多重条件选择语句

缺点:
1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类
2、策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量

命令模式

将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分隔开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。

结构
1、抽象命令类
2、具体命令类
3、实现者/接收者
4、调用者/请求者

在这里插入图片描述
优点
1、降低系统耦合度,命令模式能将调用操作的对象与实现该操作的对象解耦
2、增加或删除操作非常方便。
3、可以实现宏命令。
4、方便实现undo和redo操作。

缺点:
1、可能会导致某些系统有过多的具体命令类
2、系统结构更加复杂

责任链模式

又叫职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。

结构
1、抽象处理者
2、具体处理者
3、客户类

在这里插入图片描述

优点
在这里插入图片描述

缺点:

在这里插入图片描述

开始摆烂,学到这里好混乱,感觉学每一种好像懂了,但跟其他的区别又说不上来,又感觉每种模式差不多。。。。。。唉。。。。。。

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

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

相关文章

喜讯频传!安全狗获评CCIA“2023年度先进会员单位”

1月4日,2023年度中国网络安全产业联盟会员大会暨理事会在北京成功举办。 作为国内云原生安全领导厂商,安全狗也受邀出席此次活动。 厦门服云信息科技有限公司(品牌名:安全狗)创办于2013年,是国内领先的云安…

C#高级 09 IEnumerable可枚举类型--可迭代类型

了解Linq操作需先了解IEnumerable可枚举类型–可迭代类型,因为Linq中的很多函数的返回值类型和传入的形参类型都是IEnumerable的。 IEnumerable可枚举类型–可迭代类型 只要一个类型实现了IEnumerable接口,就可以对这个类型进行遍历。 首选来看IEnumer…

力扣题:高精度运算-1.4

力扣题-1.4 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:306. 累加数 解题思想:首先先通过secondStart和secondEnd可以确定num1 num[0:secondStart],num2 num[secondStart:secondEnd],然后遍历secondStart和secondEnd…

理解二叉树的遍历(算法村第七关白银挑战)

二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]解 LeetCode以及面试中提供的方法可能…

如何使用WebSecProbe对Web应用程序执行复杂的网络安全评估

关于WebSecProbe WebSecProbe是一款功能强大的Web应用程序网络安全评估工具,该工具专为网络安全爱好者、渗透测试人员和系统管理员设计,可以执行精确而深入的复杂网络安全评估。 该工具简化了审查网络服务器和应用程序的复杂过程,允许广大研…

计算机创新协会冬令营——暴力枚举题目06

我给大家第一阶段的最后一道题就到这里了,下次得过段时间了。所以这道题简单一点。但是足够经典 下述题目描述和示例均来自力扣:两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target …

CAVER: Cross-Modal View-Mixed Transformer for Bi-Modal Salient Object Detection

目录 一、论文阅读笔记: 1、摘要: 2、主要贡献点: 3、方法: 3.1 网络的总体框架图: 3.2 Transformer-based Information Propagation Path (TIPP) 3.3 Intra-Modal/Cross-Scale Self-Attention (IMSA/CSSA) Q1…

谷歌Google插件离线导出、安装

离线导出: 1.进入当前用户路径下: %userprofile%\AppData\Local\Google\Chrome\User Data\Default\Extensions 2.详情查看ID,即对应上述文件夹路径下插件文件名! 3.压缩成ZIP包! 离线导入: 1.打开开发者模式 2.导入上述解压的压…

MySQL基础笔记(5)DCL数据控制语句

数据控制语句,用来管理数据库用户、控制数据库的访问权限~ 目录 一.用户管理 1.查询用户 2.创建用户 3.修改用户密码 4.删除用户 二.权限管理 1.查询权限 2.授予权限 3.撤销权限 一.用户管理 1.查询用户 use MySQL; select * from user; 2.创建用户 crea…

【C/C++】轻量级跨平台 开源串口库 CSerialPort

文章目录 1、简介2、支持的平台3、已经支持的功能4、Linux下使用5、使用vcpkg安装CSerialPort6、交叉编译7、效果图8、基于CSerialPort的应用8.1、CommMaster通信大师8.2、CommLite串口调试器 1、简介 Qt 的QSerialPort 已经是跨平台的解决方案,但Qt开发后端需要 Q…

高性价比的高速吹风机/高速风筒解决方案,基于普冉单片机开发

高速吹风机是今年非常火的一款产品,快速崛起并颠覆了传统吹风机,高速吹风机也成为了传统吹风机替代的一个大趋势。高速吹风机是利用高转速产生的大风量来快速吹干头发,由于其精巧的外观设计、超低的噪声、出色的干发效果,高速吹风…

篇二:springboot2.7 OAuth2 server使用jdbc存储RegisteredClient

上一篇 <<springboot 2.7 oauth server配置源码走读一>>中简单描述了oauth2 server的配置&#xff0c;其中使用了内存保存 RegisteredClient&#xff0c;本篇改用mysql存储。 db存储需要创建表&#xff0c;表结构应该是什么样的呢&#xff0c;从spring给我们封装好…

国际光伏展

国际光伏展是一个专门展示和推广光伏技术和产品的国际性展览会。光伏技术是一种利用光能转化为电能的技术&#xff0c;被广泛应用于太阳能发电系统和其他可再生能源系统中。国际光伏展汇集了来自全球的光伏企业、研究机构和专业人士&#xff0c;展示最新的光伏产品、技术和解决…

量子经济应用新道路!德国旗舰项目PlanQK首次公布研究成果

&#xff08;图片来源&#xff1a;网络&#xff09; 作为人工智能创新竞赛的一部分&#xff0c;由量子开放平台和生态系统公司Anaqor AG与斯图加特大学牵头、联邦经济事务和气候保护部资助的PlanQK研究项目&#xff0c;经过四年的深入研究&#xff0c;于近期公布了其研究成果&…

圣诞节来临,如何用海外云手机给亚马逊店铺引流?

马上就要到圣诞节了&#xff0c;这是一年中冲刺销售量的最后一个好机会&#xff0c;对所有亚马逊卖家都十分重要。而无论是亚马逊新手卖家还是老卖家&#xff0c;要想在激烈的竞争中取胜&#xff0c;仅仅靠产品本身是不现实的&#xff0c;通过测评和社媒引流获取更多曝光和流量…

如何使用 NFTScan NFT API 在 PlatON 网络上开发 Web3 应用

PlatON 是由万向区块链和矩阵元主导开发的面向下一代的全球计算架构&#xff0c;创新性的采用元计算框架 Monad 和基于 Reload 覆盖网络的同构多链架构&#xff0c;其愿景是成为全球首个提供完备隐私保护能力的运营服务网络。它提供计算、存储、通讯服务&#xff0c;并提供算力…

淘宝以图搜商品API调用详细步骤(apiKeysecret)

以图片来搜索商品是电商平台常见的一个功能&#xff0c;一般用于搜索同款、找爆品、淘宝拍立淘等功能。 通过item_search_img可以实现通过图片来搜索同款商品列表&#xff0c;响应参数包括宝贝标题、列表类型、宝贝图片、优惠价、价格、销量、宝贝ID、商品风格标识ID、掌柜昵称…

数据结构—图(上)

文章目录 12.图(上)(1).图的基本概念#1.图的基本定义#2.边的分类#3.数据结构的一些规定#4.子图#5.完全图#6.路径#7.连通性和连通分量#8.度 (2).图的存储方式#1.邻接矩阵#2.邻接表 (3).图的遍历#1.深度优先搜索(Depth First Search)i.走个迷宫ii.DFS的思想iii.代码实现 #2.广度优…

Linux:apache优化(3)—— 页面缓存时间

作用&#xff1a;通过 mod_expires 模块配置 Apache&#xff0c;使网页能在客户端浏览器缓存一段时间&#xff0c;以避免重复请求&#xff0c;减轻服务端工作压力。启用 mod_expires 模块后&#xff0c;会自动生成页面头部信息中的 Expires 标签和 CacheControl 标签&#xff0…

COCO Dataset Format

COCO (Common Objects in Context) dataset数据集是一个广泛应用于目标检测、语义分割的数据集&#xff0c;包含330K 图片数据 与 2.5 million 个目标实体。 1.数据集下载 !wget http://images.cocodataset.org/zips/train2017.zip -O coco_train2017.zip !wget http://image…