《设计模式》读书笔记——设计模式相关

GB28181 —— 1、Ubuntu20.04下使用ZLMediaKit+WVP搭建GB28181流媒体监控平台(连接带云台摄像机) GB28181 —— Ubuntu20.04下使用ZLMediaKit+WVP搭建GB28181流媒体监控平台 阅读详情

读《设计模式——可复用面向对象软件的基础》时候做的笔记。下面的文字及图表基本上是该书的内容。

什么是设计模式

一个设计模式有4个基本要素:

模式名称(pattern name)一个帮助记忆的词汇。用一两个词来描述模式的问题、解决方案和效果。设计模式允许我们在较高的抽象层次上进行设计。

问题(problem)描述了应该在什么时候或者什么情况下使用该模式。它解释了设计问题和问题存在的前因后果,它可能描述了特点的设计问题,也可能描述了导致不灵活设计的类或对象结构。

解决方案(solution)描述了设计的组成成分,它们之间的相互关系以及各自的职责和协助方式。

效果(consequences)描述了模式应用的效果及使用模式应权衡的问题。它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显示地列出这些效果对理解和评价这些模式很有帮助。

 设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。

 一个设计模式命名、抽象和确定了一个通用设计结构的主要方面,这些设计结构能被用来构造可复用的面向对象设计。设计模式确定了所包含的类和实例,它们的角色、协作方式以及职责分配。每一个设计模式都集中于一个特定的面向对象设计问题或设计要点,描述了什么时候使用它,在另一些设计约束条件下是否还能使用,以及使用的效果和如何取舍。


23种设计模式的基本意图

抽象工厂(Abstract Factory)提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

适配器(Adapter)将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

桥接(Bridge)将抽象部分与它的实现部分分离,使他们都可以独立地变化。

生成器(Builder)将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

职责链(Chain ofResponsibility) 为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象练成一条链,并沿用这条链传递该请求,直到有一个对象处理它。

命令(Command)将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。

组成(Composite)将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对每个对象和复合对象的使用具有一致性。

装饰(Decorator)动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类的方式更为灵活。

外观(Facade)为子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

工厂方法(Factory Method)定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。

享元(Flyweight)运用共享技术有效地支持大量细粒度的对象。

解释器(Interpreter)给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用文法表示来解释语言中的句子。

迭代器(Iterator)提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。

中介者(Mediator)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

备忘录(Memento)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。

观察者(Observer)定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

原型(Prototype)用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。

代理(Proxy)为其他对象提供一个代理以控制对这个对象的访问。

单例(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点。

状态(State)允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。

策略(Strategy)定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。

模板方法(Template Method)定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

发问者(Visitor)表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用余这些元素的新操作。


设计模式的分类

          目的

范围  

创建型

结构型

行为型

类

Factory Method

 

Adapter(类)

Interpreter

Template Method

对象

Abstract Factory

Builder

Prototype

Singleton

 

 

 

Adapter(对象)

Bridge

Composite

Decorator

Façade

Flyweight

Proxy

Chain of Responsibility

Command

Iterator

Mediator

Mementor

Observer

State

Strategy

Visitor

以上的分类是根据两条准则进行的。

第一是目的准则,即模式是用来完成什么工作的。模式依据其目的分为创建型、结构型、行为型三种。创建型模式与对象的创建有关;结构型模式处理类或对象的组合;行为型模式对类或对象怎样交互和怎样分配职责进行描述。

第二是范围准则,指定模式主要是用于类还是用于对象。类模式处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来。对象模式处理对象间的关系,这些关系在运行时刻是变化的,更具动态性。

创建型类模式将对象的部分创建工作延迟到子类,而创建型对象模式则将它延迟到另一个对象中。结构型类模式使用继承机制来组合类,而结构型对象模式则描述了对象的组装方式。行为型类模式使用继承描述算法和控制流,而行为型对象模式则描述一组对象怎样协作完成单个对象所无法完成的任务。


设计模式之间的关系



相关问题的设计模式解决方案

可复用的面向对象设计有以下原则:

针对接口编程,而不是针对实现编程;

优先使用对象组合,而不是类继承

 

下面阐述了一些导致重新设计的一般原因,以及解决这些问题的设计模式:

1) 通过显式地指定一个类来创建对象

在创建对象时指定类名将使你受特定实现类约束而不是受特定接口约束。这会使未来的变化更复杂。要避免这种情况,应该间接地创建对象。

设计模式:Abstract Factory,FactoryMethod,Prototype

2) 对特殊操作的依赖

当你为请求指定一个特殊的操作时,完成该请求的方式就固定下来。为避免把请求代码写死,你将可以在编译时刻或运行时刻很方便地响应请求的方法。

设计模式:Chain of Responsibility,Command

3) 对硬件和软件平台的依赖

外部的操作系统接口和应用编程接口(API)在不同平台上是不同的。依赖于特定平台的软件将很难移植到其他平台上,甚至都很难跟上本地平台的更新。所以设计系统时限制其平台相关性就很重要了。

设计模式:Abstract Factory,Bridge

4) 对对象表示或实现的依赖

知道对象怎样表示、保存、定位或实现的客户在对象发生变化时可能也需要变化。对客户隐藏这些信息能阻止连锁变化。

设计模式:Abstract Factory,Bridge,Memento,Proxy

5) 算法依赖

算法在开发和复用时常常被扩展、优化和替代。依赖于某个特定算法的对象在算法发生变化时不得不变化。因此有可能发生变化的算法应该孤立起来。

设计模式:Builder,Iterator,Strategy,TemplateMethod,Visitor

6) 紧耦合

紧耦合的类很难独立地被复用,因为它们是互相依赖的。紧耦合产生单块的系统,要改变或删掉一个类,你必须理解和改变其他许多类。这样的系统是一个很难学习、移植和维护的密集体。

松耦合提高了一个类本身被复用的可能性,并且系统更易于学习、移植、修改和扩展。设计模式使用抽象耦合和分层技术来提高系统的松耦合性。

设计模式:Abstract Factory,Command,Façade,Mediator,Observer,

Chain of Responsibility

7) 通过生成子类来扩充功能

通常很难通过定义子类来定制对象。每一个新类都有固定的实现开销(初始化、终止处理等)。定义子类还需要对父类有深入的了解。如,重定义一个方法可能需要重定义其他方法。一个被重定义的方法可能需要调用继承下了的方法。并且子类方法会导致类爆炸,因为即使对于一个简单的扩充,你也不得不引入许多新的子类。

一般的对象组合技术和具体的委托技术,是继承之外组合对象行为的另一种灵活方法。新的功能可以通过新的方式组合已有对象,而不是通过定义已存在类的子类的方式加到应用中。另一方面,过多使用对象组合会使设计难于理解。

设计模式:Bridge,Chain ofResponsibility,Composite,Decorator,Observer,

Strategy

8) 不能方便地对类进行修改

有时你不得不改变一个难以修改的类。也许你需要源代码而又没有(对于商业类库),或者可能对类的任何改变会要求修改许多已存在的其他子类。

设计模式:Adapter,Decorator,Visitor


设计模式所支持的设计可变方面

目的

设计模式

可变的方面

创建

Abstract Factory

产品对象家族

Builder

如何创建一个组合对象

Factory Method

被实例化的子类

Prototype

被实例化的类

Singleton

一个类的唯一实例

结构

Adapter

对象的接口

Bridge

对象的实现

Composite

一个对象的结构和组成

Decorator

对象的职责,不生成子类

Façade

一个子系统的接口

Flyweight

对象的存储开销

Proxy

如何访问一个对象;该对象的位置

行为

Chain of Responsibility

满足一个请求的对象

Command

何时、怎样满足一个请求

Interpreter

一个语言的文法和解释

Iterator

如何遍历、访问一个聚合的各元素

Mediator

对象间怎样交互、和谁交互

Memento

一个对象中哪些私有信息存在该对象之外,以及在什么时候进行存储

Observer

多个对象依赖于另一个对象,而这些对象又如何保持一致

State

对象的状态

Strategy

算法

Template Method

算法中的某些步骤

Visitor

某些可作用于一个(组)对象上的操作,但不修改这些对象的类


ssm框架搭建 这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载 立即下载

相关推荐

CST微带贴片天线设计全流程:从S11优化到辐射方向图分析

微带贴片天线是现代无线通信设备中的关键部件,其设计依赖于电磁场理论与仿真软件的结合。理解天线的基本工作原理,如谐振频率、阻抗匹配和辐射机制,是进行有效设计的基础。通过电磁仿真,工程师可以精确预测天线性能,避免传统手工计算的误差。在工程实践中,CST Studio Suite作为行业标准的三维电磁仿真工具,能够高效处理复杂的边界条件与材料属性,帮助优化S11参数和辐射方向图。本文聚焦于2.4GHz Wi-Fi频段微带贴片天线的完整设计流程,详细解析了端口设置、网格划分等关键步骤,并针对常见的仿真失败问题提供了

weixin_30784501的博客 459

常用设计模式学习总结

常用设计模式学习分享 设计模式概述 设计模式定义 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 2、设计模式分类 (1)根据其目的(模式是用来做什么的)可分为创建型,结构型和行为型三种: 创建型模式主要用于创...

陈Sir的博客 678

GPT Researcher 的win docker安装攻略

github网址是:https://github.com/assafelovic/gpt-researcher/blob/master/README-zh_CN.md。使用 Docker 运行 AI-Researcher 项目的。因为docker安装方法不够清晰,因此写一个使用方法。打开设置——docker engine ,增加代码。如有其他问题,可提供错误截图或日志进一步排查!

weixin_43818488的博客 1123

面向对象设计原则

设计原则名称 设计原则简介 单一职责 类的职责要单一,不能将太多的职责放在一个类中 开闭原则 软件实体对扩展开发,但对修改是关闭的,即在不修改一个软件的基础上去扩展其功能 里氏代换原则 在软件系统中,一个可以接受基类对象的地方必然可以接受一个子类对象 依赖倒转原则 要针对抽象层编程,而不要针对具体类编程 接口隔离原则 使用多个专门的接口取代一个统一的接口 合成复...

书香水墨 269

【可信数据空间-部署方案】

此部署架构体现了以下几个核心原则:去中心化: 数据存储和处理完全分布在各个参与者端,运营方只提供核心的协调和信任基础设施。安全边界清晰: 通过VPC、DMZ、防火墙、K8s命名空间等技术,在每个层级都建立了严格的安全边界。高可用与弹性: 所有关键服务均以集群方式部署,避免单点故障,并能根据负载动态伸缩。云原生: 全面采用容器化和Kubernetes编排,简化部署、管理和运维复杂度。合规性: 架构设计天然满足数据驻留要求(数据留在企业本地),并为所有操作提供不可篡改的审计追踪能力。

u014716614的博客 771

形式化方法(Formal Methods)和人工智能(Artificial Intelligence)

一、形式化方法(Formal Methods) ​ 形式化方法最初应用在硬件上,验证硬件的正确性,后面逐渐应用到软件编程中,能够在软件中找到软件的错误,验证软件的安全可靠。形式化方法更加接近离散数学,所以其应用难度非常大,同时学习成本也较高。再加上形式化方法的大多数理论还停留在上个世纪,由于程序越来越复杂,导致形式化方法进行验证需要大量人工和时间,以至于现在绝大部分软件开发人员完全没有考虑过这个方法,甚至没有听说过这个名词。 ​ 形式化方法最新的应用成果是在工业上,比如一些极其重要且对安全性要求极高的领域(

qq_37030400的博客 4004

设计模式笔记

设计模式(Design pattern)代表了最佳的实践

薆的天空 732

细胞膜电学特性的分数阶微积分建模

分数阶微积分在细胞膜电学特性建模中的应用主要体现在对细胞膜的电容行为和神经元放电活动的更精确描述上。

冰河世纪20的博客 620

快速记住23种设计模式

签合同,要分三步:1.创建新建合同 2.设计合同内容结构 3.要遵守合同的行为规范(对应创建,结构,行为三部分) 口诀: 单原二厂建 (创建类的5个模式,二厂是指简单工厂和抽象工厂) 桥(帮)组享外带装适 (结构类的6个模式) 观摩(模)命职状 房(访)中洁厕(解策)备跌(迭) 设计模式主要分三个类型:创建型、结构型和行为型。 创建型有: 一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖

hkduan的博客 9144

ubuntu安装英伟达显卡驱动后wifi消失解决方法

ubuntu安装英伟达显卡驱动后(比如4090和3090等),会把wifi和蓝牙驱动去除,导致wifi无法连接。需要重新下载驱动安装。

人工智能(AI)技术,大模型技术,深度学习,机器学习,计算机视觉,AI工具实践应用等分享 3903

YOLOv11改进 | 上采样篇 | YOLOv11引入CARAFE上采样

在本文中,我们提出了一个通用、轻量级、高效的特征重组算子CARAFE来实现这一目标.CARAFE有几个吸引人的特性:(1)大视场。(2)内容感知处理。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~大视场:不同于以往的方法(如双线性插值),CARAFE能够在更大的感受野内聚合上下文信息,从而捕获更丰富的语义信息。

tsg6698的博客 921

《设计模式Design Pattern》读书笔记之十七

《设计模式Design Pattern》读书笔记之十七Observer模式结构 目的在一个一对多(one-to-many)的关系中,当一个对象(one)的状态被更新的时候,它的所有的相关对象(many)都会被得到通知。 讨论1,  可能会带来很大的状态更新成本,subject的一个很小的状态更新都可能使得大量的observer进行相应的更新。更为严重的是,如果subject不提供是什么状态被更新了

Jadyleung的专栏 1450

华为OD机试 - 第k个排列 - 全排列递归(Python/JS/C/C++ 2025 C卷 100分)

给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有n!按大小顺序升序列出所有排列的情况,并一一标记当n=3时,所有排列如下“123”,“132,“213”,“231”,“312”,“321”输入两行,第一行为n,第二行为k,给定n的范围是[1,9],给定k的范围是[1,n!排列为“12”和“21”,第2个是“21”。给定n和k,返回第k个排列。输出排在第k位置的数字。只有一个排列,直接返回。

学Java,找哪吒 983

游戏设计模式总结

后续这本书的读书笔记感悟都将更新在这里。

林深藏却云门寺 3510

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

《Android源码设计模式解析与实战》读书笔记(一)

《Android源码设计模式解析与实战》读书笔记

weixin_33834910的博客 114

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

享元模式

读书笔记之蛋疼 享元模式

小学生的博客 394

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【HeadFirst系列之HeadFirst设计模式】第2天之设计模式入门之策略设计模式

1.会飞的鸭子问题解决方案演进2.策略设计模式的介绍3.一些OO原则:封装变化多用组合,少用继承(I have a 而不是I’m a)针对接口编程,不针对实现编程。

工一木子 1143

Head First设计模式读书笔记

依然风 | ios 746

创造者模式

读书笔记之设计模式

小学生的博客 622

模版方法模式

读书笔记之设计模式

小学生的博客 476

中介模式

读书笔记之设计模式

小学生的博客 491

设计模式之C#实现(一)--AbstractFactory

Abstract Factory 读书笔记意图:       为创建相关的或者相互依赖的对象配置一个借口而不指定他们具体的类。别名:       Kit理解:       抽象工厂是一种创建型的模式,它为我们创建对象提供了有效地方法,我们不用直接new对象而是可以为创建对象配置一个接口,该接口定义了如何创建对象的方法。我们还知道抽象工厂创建的对象是一个系列的或者是一族的。该

Ninth(天下第九)的专栏 1359

Java学习路线总结,搬砖工逆袭Java架构师

2、java集合3、Java高并发4、Java8新特性5、Java代码实例二、javaweb三、数据库四、Spring + SpringMVC + MyBatis五、Spring Boot六、Redis七、目标检测YOLO八、各种中间件技术九、Netty十、数据结构与算法十一、JVM十二、设计模式十三、Linux十四、SpringCloud十五、JavaScript十六、Vue十七、计算机网络十八、性能调优十九、系统设计二十、各种技术的相关源码分析二十一、计算机理论二十二、读书笔记1、重构 改善既有代码的设

2401_87299195的博客 3570

MXNet RowSparseNDArray 实战指南:面向稀疏梯度更新的行稀疏存储与惰性优化器

RowSparseNDArray 是 MXNet 专为"绝大多数行切片全为零"的矩阵设计的一种稀疏存储格式,其核心场景是**稀疏特征下模型权重的梯度更新**:当输入特征向量高度稀疏时,梯度矩阵中大量行切片为零,按行稀疏方式存储与更新可显著减少内存占用与无效计算。本文将完整讲解 RowSparseNDArray 的存储原理、创建方式、存储类型转换、拷贝语义、稀疏算子与存储类型推断,以及它与 `laz

gitblog_00083的博客 904

【笔记】DDD领域驱动设计

领域驱动设计 原书第二部分

qq_40690815的博客 1278

不错的帖子

自动化测试 https://www.jianshu.com/p/b373aec43c01 UI自动化测试 https://blog.youkuaiyun.com/jgw2008/article/details/78087449 Espresso和UIAutomator - 完美的结合 服务发现 https://blog.youkuaiyun.com/swanabin/article/details/520...

热爱生活热爱技术的专栏 194
上一篇: 《设计模式》读书笔记——设计模式相关
下一篇: 设计模式——抽象工厂模式
HingKwan
博客等级 码龄17年 51粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值