【设计模式】对象行为型模式

news2024/10/7 10:20:15

行为创建型模式

在这里插入图片描述

系列综述:
来源:该系列是主要参考《大话设计模式》和《设计模式(可复用面向对象软件的基础)》,其他详细知识点拷验来自于各大平台大佬的博客。
总结:汇总篇
如果对你有用,希望关注·点赞·收藏一波。



😊点此到文末惊喜↩︎


对象行为型模式

策略模式

  1. 原则
    • 变化点是类封装的目标。
    • 封装是类划分的前提,类并不是越多越好。
    • 类划分的基础是抽象,是具有相同属性和功能的对象的抽象
  2. 核心:通过switch选择相似行为的选择
  3. 代码原理
    • 业务场景类:在具体的业务逻辑中封装算法族的多态调用
    • 抽象策略类:算法族的抽象接口
    • 具体策略类:算法族中具体的算法实现
      在这里插入图片描述
  4. 特点:
    • 破坏开闭原则。拓展产品需要修改原工厂内部的逻辑
    • 符合单一职责原则。将对象的创建逻辑和实现的业务逻辑进行了分离
  5. 示例代码
// 抽象策略类
interface AbstarctStrategy{
    void algorithm();
}
// 具体策略类
class ConcreteStrategy1 implements AbstarctStrategy
{
    @Override
    public void algorithm()
    {
        System.out.println("具体策略1");
    }
}
class ConcreteStrategy2 implements AbstarctStrategy
{
    @Override
    public void algorithm()
    {
        System.out.println("具体策略2");
    }
}

// 业务场景类
class Context
{
    private AbstarctStrategy strategy;
    public void setStrategy(AbstarctStrategy strategy){
        this.strategy = strategy;
    }
	// 核心:对于算法的多态调用
    public void algorithm(){
        strategy.algorithm();
    }
}

// 调用
Context context = new Context();
context.setStrategy(new ConcreteStrategy1());
context.algorithm();
context.setStrategy(new ConcreteStrategy2());
context.algorithm();

以下不是,待更新


工厂方法模式

  1. 抽象原理
    • 抽象产品基类 :定义了产品的规范,描述了产品的主要特性和功能。
    • 具体产品子类 :实现或者继承抽象产品的子类
    • 工厂基类 :定义类别区分的功能接口
    • 具体工厂子类:具体工厂对应生产具体的产品
  2. 代码原理:
    • 定义一个用于创建对象的接口,让子类决定实例化哪一个类
    • 使用抽象解除对于具体实例的耦合,将简单工厂模式中工厂类的分支导致的与对象创建的耦合使用抽象类进行解决
      在这里插入图片描述
// 产品类与简单工厂方法相同,工厂方法就是将工厂抽象出来,具体对象由具体对象创建

// 工厂方法接口类:根据对象实例化
interface IFactory{
	Operation CreateOperate();
}

// 工厂子类
class OperationAddFactory : IFactory{
	public Operation CreateOperate(){
		return new OperationAdd();
	}
}
class OperationSubFactory : IFactory{
	public Operation CreateOperate(){
		return new OperationSub();
	}
}

// 调用
IFactory factory = new OperationXXXFactory();// 实例化工厂对象
Operation oper = factory. CreateOperate();// 使用工厂动态生成对应子类对象赋值给父类
oper.m_Num1 = 1;// 给父 类对象的数据成员进行赋值
oper.m_Num2 = 2;
double result = oper.GetResult();

抽象工厂模式

  1. 抽象原理
    • 抽象工厂基类:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。
    • 具体工厂类:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。
    • 多个抽象产品基类:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
    • 具体产品类:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。
  2. 特点
    • 满足开闭原则:当增加一个新的产品族时只需增加一个新的具体工厂,不需要修改原代码。
    • 不满足开闭原则:当产品族中需要增加一个新种类的产品时,则所有的工厂类都需要进行修改。
    • 当系统中只存在一个等级结构的产品时,抽象工厂模式将退化到工厂方法模式。
      在这里插入图片描述
  3. 代码示例
在这里插入代码片


少年,我观你骨骼清奇,颖悟绝伦,必成人中龙凤。
秘籍(点击图中书籍)·有缘·赠予你


🚩点此跳转到首行↩︎

参考博客

  1. 待定引用
  2. 待定引用
  3. 待定引用
  4. 待定引用
  5. 待定引用
  6. 待定引用
  7. 待定引用
  8. 待定引用

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

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

相关文章

【超分顶会详解+部署】ESRT:Transformer for Single Image Super-Resolution

文章目录ESRT1. 超分基本知识1.1 SRF1.2 xxx_img1.3 裁剪1.4 超分模型评估标准2. LCB、LTB 模块2.1 序列模型3. 损失函数4. 部署运行4.1 数据集4.1.1 训练集4.1.2 验证集4.1.3 测试集4.2 数据集转换4.3 训练4.4 测试4.5 效果ESRT ESRT(Efficient Super-Resolution …

直播预告 | 企业如何轻松完成数据治理?火山引擎 DataLeap 给你一份实战攻略!

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 企业数字化转型正席卷全球,这不仅是趋势所在,也是企业发展必然面对的考题,也是企业最关心、最难决策的难题,数字化不…

C/C++每日一练(20230222)

目录 1. 部分复制字符串(★) 2. 按字典顺序排列问题(★★) 3. 地下城游戏(★★★) 附录 动态规划 1. 部分复制字符串 将字符串2小写字母复制到字符串1:编写程序,输入字符串s2,将其中所有小写字母复制到字符串数组strl中。例如:aal1bb22cc33de4AA55…

简历上面的项目经历怎么写?怎么写才能显得突出?

项目经历可不可以是课堂项目? 其实对很多同学来说,不是不会写项目经历,而是根本不知道什么是项目经历,哪些内容可以写在项目经历中。所以看到简历中的项目经历模块,感觉不知道怎么写?那么对于大学生来说,即使你大学四年中没有太多活动、竞赛、科研的经历,但是你一定上过…

Leetcode力扣秋招刷题路-0088

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 88. 合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 …

学术贴 | FPGA 加速图数据库查询执行

导读本篇博客主要讲解发布于 Microprocessors and Microsystems 的文章《Semi-static Operator Graphs for Accelerated Query Execution on FPGAs》,介绍它所提出的算法与试验结果,并结合实际情况给出一些思考。一、背景介绍在当今的数据化场景越来越丰…

【11】FreeRTOS的延时函数

目录1.延时函数-介绍2.相对延时函数-解析2.1函数prvAddCurrentTaskToDelayedList-解析2.3滴答定时器中断服务函数xPortSysTickHandler()-解析2.4函数taskSWITCH_DELAYED_LISTS() -解析3.延时函数-实验4.总结1.延时函数-介绍 函数描述vTaskDelay()相对延时xTaskDelayUntil()绝对…

linux集群技术(三)--七层负载均衡-HAproxy(一)

HAproxy 概述HAproxy 特点案例1案例2-HAproxy动静分离 1.HAproxy 概述 1.1 关于4/7层负载均衡 1. 无负载平衡: 没有负载平衡的简单Web应用程序环境可能如下所示 在此示例中,用户直接连接到您的Web服务器,在yourdomain.com上,…

2023年,如何自学通过PMP?(含pmp资料)

自学需要解决的问题: 自学的难度很大,不管是零基础还是项目管理经验丰富,都要明白两个点: 1、复杂的报考流程; 2、学习毅力(通过率)。 第一点、复杂的考试流程 考试先英文报名,英文…

Apache DolphinScheduler 助力 Trino 快速实现湖仓一体数据建设

点亮 ⭐️ Star 照亮开源之路https://github.com/apache/dolphinscheduler作者 | 钟嘉杰 Apache DolphinScheduler PMCMember// 在面对联合查询和湖仓一体场景时,Trino 已经是不少开发者的不二之选。Trino 是一个查询引擎,在数仓、即席查询方面非常强大…

MyBatis分页插件

目录 分页插件 Mybatis插件典型适用场景 实现思考 第一个问题 第二个问题 自定义分页插件 分页插件使用 添加pom依赖 插件注册 调用 代理和拦截是怎么实现的 PageHelper 原理 分页插件 MyBatis 通过提供插件机制,让我们可以根据自己的需要去增强MyBati…

idea快捷键大全

idea快捷键大全idea快捷键大全一、速查版1.Idea常用快捷键2.Idea快捷键(全)二、分类版三、其他1.IDEA创建JAVA项目2.IDEA创建web项目3.tomcat安装配置环境4.IDEA中下载源码错误5.maven环境安装6.IDEA创建maven项目7.IDEA一个打开多个项目8.IDEA切换工作目录9.IDEA导入maven项目…

“clashx需要使用管理员权限安装更新一个帮助程序...“问题的解决过程

大家由于各种原因,经常需要出去看看,比如你想玩玩最近大火的人工智能技术chatgpt。但是如果你想玩chatgpt,那需要借助一些工具才能访问,我们都知道。有很多小伙伴会使用clashx这个开源软件,毕竟便宜,而且也…

从0到1一步一步玩转openEuler--21 openEuler 管理服务-改变运行级别

文章目录21 管理服务-改变运行级别21.1 Target和运行级别21.2 查看系统默认启动目标21.3 查看当前系统所有的启动目标21.4 改变默认目标21.5 改变当前目标21.6 切换到救援模式21.7 切换到紧急模式21 管理服务-改变运行级别 21.1 Target和运行级别 systemd用目标(t…

数据结构——复杂度讲解(2)

作者:几冬雪来 时间:2023年2月22日 内容:数据结构复杂度讲解 目录 前言: 复杂度讲解(2): 1.空间复杂度是什么: 2.空间复杂度讲解: 结尾: 前言&#x…

【深度探讨】哪些领域将迎来区块链爆发性增长

发表时间:2022年12月6日 信息来源:bsvblockchain.org 如果我们不在日常业务和政府流程中采用区块链技术,就会浪费太多的技术价值和资金。这意味着未来几年,我们可能会看到区块链技术的快速落地,而有些国家已经为这种爆…

实验室设计建设方案主要内容

实验室设计建设整体解决方案SICOLAB需要综合考虑实验室的功能需求、空间布局、设备选型、安全防护、节能环保等多方面因素。以下是一个基本的实验室设计建设方案的流程:一、需求分析:了解实验室的使用目的、实验内容、使用人数、设备种类、实验标准等&am…

程序员赚钱指南,兼职社区招募

👨‍💻作者简介:大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。 🎉专栏推荐:目前在写一个CV方向专栏,后期会更新不限于目…

正则表达式(Java)

定义 正则表达式(Regular Expression)是一种文本模式匹配的工具,可以用来搜索、替换或提取文本中的模式。它可以用来检查文本是否符合某种模式,或者从文本中提取出符合某种模式的部分 一般用法 未分组 public static void mai…

php+vue加油站会员服务系统 java微信小程序

目 录 1绪论 1 1.1项目研究的背景 1 1.2开发意义 1 1.3项目研究现状及内容 5 1.4论文结构 5 2开发技术介绍 7 2.5微信小程序技术 8 3系统分析 9 3.1可行性分析 9 3.1.1技术可行性 9 3.1.2经济可行性 9 3.1.3操作可行性 10 3.2网站性能需求分析 10 3.3网站功能分析 10 3.4系统…