哈工大软件构造-设计模式笔记

news2024/12/23 5:17:39

文章目录

    • UML简单知识
    • 1.单例模式
    • 2.工厂方法模式
    • 3.迭代器模式
    • 4.策略模式
    • 5.建造者模式
    • 6.模板方法模式
    • 7.代理模式
    • 8.责任链模式
    • 9.抽象工厂模式
    • 10.适配器模式
    • 11.观察者模式
    • 12.外观模式

参考了
https://blog.csdn.net/u010837612/category_10400718.html
https://www.runoob.com/design-pattern/design-pattern-tutorial.html
https://zhuanlan.zhihu.com/p/109655171

UML简单知识

参考https://zhuanlan.zhihu.com/p/109655171

“+”表示 public;
“-”表示 private;
“#”表示 protected;
不带符号表示 default。 friendly

在这里插入图片描述
在这里插入图片描述

实现关系
在这里插入图片描述

1.单例模式

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

主要解决:一个全局使用的类频繁地创建与销毁。

何时使用:当您想控制实例数目,节省系统资源的时候。

如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

在这里插入图片描述

在这里插入图片描述

2.工厂方法模式

在这里插入图片描述
在这里插入图片描述

3.迭代器模式

迭代器模式(Iterator Pattern)
意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。

主要解决:不同的方式来遍历整个整合对象。

何时使用:遍历一个聚合对象。

如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象。

4.策略模式

策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式是一种对象行为型模式

interface Strategy
class ConcreteStrategy implments Strategy

class Cart
{
	public void opration(int num,Strategy starategy)
	{
		strategy.operation(num);
	}
}
class CLient
{
	cart..opration(num,new ConcreStratgy());
}

有多种不同的算法来实现同一个任务,但需要client根据需要
动态切换算法,而不是写死在代码里

public interface Strategy {
   public int doOperation(int num1, int num2);
}
public class OperationSubtract implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 - num2;
   }
}
public class OperationAdd implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 + num2;
   }
}
class Context {
	private AbstractStrategy strategy; //维持一个对抽象策略类的引用
 
    public void setStrategy(AbstractStrategy strategy) {
        this.strategy= strategy;
    }
 
    //调用策略类中的算法
    public void algorithm() {
        strategy.algorithm();
    }
}
abstract class Strategy {
    public abstract void algorithm(); //声明抽象算法
}
class ConcreteStrategyA extends AbstractStrategy {
    //算法的具体实现
    public void algorithm() {
       //算法A
    }
}

Context context = new Context();
AbstractStrategy strategy;
strategy = new ConcreteStrategyA(); //可在运行时指定类型
context.setStrategy(strategy);
context.algorithm();
通过context选定执行哪种策略算法然后context执行

5.建造者模式

6.模板方法模式

7.代理模式

在这里插入图片描述
在这里插入图片描述

8.责任链模式

就是拦截器的链

9.抽象工厂模式

工厂的工厂

10.适配器模式

在这里插入图片描述

11.观察者模式

比如说nacos

12.外观模式

就是提供一个类似于 main的启动器
在这里插入图片描述

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

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

相关文章

计算机操作系统复习记录(总结 —— 快速入门和快速复习)

1. 操作系统 概念:是控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其它软件接口和环境,它是计算机系统中最基本的系统软件。 功能和目标: (1&…

数据库同步 Elasticsearch 后数据不一致,怎么办?

1、实战线上问题 Q1:Logstash 同步 postgreSQL 到 Elasticsearch 数据不一致。 在使用 Logstash 从 pg 库中将一张表导入到 ES 中时,发现 ES 中的数据量和 PG 库中的这张表的数据量存在较大差距。如何快速比对哪些数据没有插入?导入过程中&am…

六:内存回收

内存回收: 应用程序通过 malloc 函数申请内存的时候,实际上申请的是虚拟内存,此时并不会分配物理内存。 当应用程序读写了这块虚拟内存,CPU 就会去访问这个虚拟内存, 这时会发现这个虚拟内存没有映射到物理内存&…

系统安全及应用

目录 一、账号安全控制 1)系统账号清理 2)密码安全控制 chage命令 示例 3)命令历史限制 4)终端自动注销 总结 账号安全 密码安全 二、系统引导和登录控制 1)使用su命令切换用户 用途及用…

【学习笔记】字节数据和字节字符串(b“ “)那些事

文章目录 0 前言1 先来看看C语言中怎么处理这种字节数据1.1 使用总结 2 再来看看Python当中是怎么处理字节数据的 0 前言 最近在尝试用PyQt做一个上位机,遇到很多关于字节字符串的问题,这里简单总结几个关键点。 1 先来看看C语言中怎么处理这种字节数据…

RK3568平台开发系列讲解(Linux系统篇)共享内存的创建和映射过程

🚀返回专栏总目录 文章目录 一、共享内存的创建和映射过程流程梳理二、如何创建共享内存?三、如何将共享内存映射到虚拟地址空间?沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们一起学习下共享内存的创建和映射过程。 一、共享内存的创建和映射过程流程梳…

推荐5款重度电脑用户也未必知道的小众软件

作为一个重度电脑用户,你可能会经常使用一些软件来完成各种任务和娱乐。但是你知道有哪些好用的WIN10软件吗?今天我就为你介绍一下我推荐的五款WIN10软件,它们分别是: 1.反恶意软件——Malwarebytes Malwarebytes是一款专业的反…

AOP与SpringBoot使用AOP实例

AOP:Aspect Oriented Programming(面向切面编程、面向方面编程),其实就是面向特定方法编程。 动态代理是面向切面编程最主流的实现。而SpringAOP是Spring框架的高级技术,旨在管理bean对象的过程中,主要通过…

浅谈thrift协议+举例通用mockserver如何实现

目录 简单来说: 举个例子: 简单来说: 1)是一个跨平台跨语言的通信协议,定义和创建跨语言服务,是一个高性能、轻量级RPC框架。 2)开发者无需关注不同语言/相同语言服务间如何通信,…

基于html+css的图片展示15

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

什么是Python?

目录 Python简介 Python发展史 Python优点与缺点 Python现如今的应用领域 总结 Python简介 Python是一种高级、解释型、面向对象的动态编程语言,由Guido van Rossum在1989年创建,首次发布于1991年。 Python设计的哲学是优雅、清晰、简单&#xff0c…

Windows逆向安全(一)之基础知识(八)

if else嵌套 这次来研究if else嵌套在汇编中的表现形式,本次以获取三个数中最大的数这个函数为例子,分析if else的汇编形式 求三个数中的最大值 首先贴上代码: #include "stdafx.h"int result0; int getMax(int i,int j,int k)…

机器视觉工程师必须知道机器视觉精度要思考哪些

​在和客户交流项目技术要求,这个项目,我要求的精度是0.01mm? 第一个问题:什么是精度? 精度要求0.01mm: 1.视觉重复性极差?静态?动态? 2.视觉与第三方相关性差异?极差?相关性系数? 3.整体系统误差?机械重复性误差? 4.产品尺寸公差? 第二个问题:精度与公差…

完美解决丨TypeError: fun() takes 2 positional arguments but 3 were given

python def fun(a, b): return a b c fun(1, 2, 3) Traceback (most recent call last): File "test.py", line 5, in <module c fun(1, 2, 3) TypeError: fun() takes 2 positional arguments but 3 were given 上面的代码中&#xff0c; fun 函数定义了两…

最通俗的语言解释01背包问题(力扣416题javascript版本)

【声明】以下内容参考了代码随想录&#xff0c;不用作商业用途~ 先来看一个场景&#xff1a;有N件物品&#xff0c;背包最大的重量为W&#xff0c;第i件物品的重量为weight[i]&#xff0c;得到的价值为value[i]&#xff0c;每件物品只用一次&#xff08;即不能重复放进背包&…

【计算方法】正交区域查询---KD-Tree概念

一、说明 kd 树是一种二叉树数据结构&#xff0c;可以用来进行高效的 kNN 计算。kd 树算法偏于复杂&#xff0c;本篇将先介绍以二叉树的形式来记录和索引空间的思路&#xff0c;以便读者更轻松地理解 kd 树。 二、正交区域查找 2.1 定义 对于k维空间的张量数据表格&#xff0…

Unity RenderStreaming 云渲染3.1.0-exp.6 食用手册

Unity云渲染 &#x1f957;资源&#x1f364;兼容性&#x1f367;手机端连接&#x1f969;安装方法&#x1f35b;IP端口设置&#x1f371;官方案例尝鲜&#x1f332;导入案例&#x1f332;添加场景&#x1f332;启动WebApp&#x1f332;打开Menu场景&#x1f332;连接参数设置&…

300左右蓝牙耳机推荐哪个好?300元左右最好的蓝牙耳机

蓝牙耳机如今在我们的生活中太普遍了&#xff0c;记得疫情刚开始天天要戴口罩&#xff0c;口罩的绳子和耳机线相缠十分的不方便&#xff0c;所以更多的人选择蓝牙耳机&#xff0c;下面整理了几款300元左右的蓝牙耳机品牌。 一、南卡小音舱Lite2蓝牙耳机 售价&#xff08;&…

4-数据结构

数据结构&#xff08;data structure&#xff09; 1. 简介 数据结构是在计算机中组织与存储数据的方式 如果想要表示“一排数字”&#xff0c;自然想到使用「数组」数据结构 数组的存储方式可以表示数字的相邻关系、顺序关系&#xff0c;但至于其中存储的是整数int&#xff0c…

【数据结构:线性表】顺序表

⚡线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直…