软件构造之面向复用的设计模式

别再折腾端口了!Kali Nethunter Kex 图形化桌面连接失败的真正原因与一键修复(附Termux命令) 本文深入分析了Kali Nethunter Kex图形化桌面连接失败的真正原因,包括端口配置变更、依赖缺失和权限问题,并提供了一键修复方案和Termux命令。通过详细的诊断步骤和优化配置,帮助用户快速恢复Kex功能,提升移动安全测试效率。 阅读详情

面向复用的设计模式,面向复用的设计模式有:Adapter(适配器模式)、Decorator(装饰器模式)、Facade(外观模式)、Strategy(策略模式)、Template method(模板模式)、Iterator(迭代器模式)。

1.Adapter 适配器设计模式
适配器模式解决的问题:解决接口间不兼容的问题,我们想要复用现有的已经存在的类,但是现有的类和我们想要实现的类接口不兼容,适配器模式通过增加一个适配器,将已有的类封装起来,从而解决接口不兼容的问题。

这张图的含义:Adaptee是我们现有的需要复用的类,但是接口不兼容,我们通过增加一个接口ITarget,适配器类Adapter实现这个接口,重写这个接口的Request方法。重写这个方法可以委托Adaptee类实现或者直接继承Adaptee类实现,从而客户端可以直接通过接口调用具体的类。从而我们达到了复用Adaptee类的目的。

适配器模式的两种形式:继承和委托

具体例子:
现有的类: LegacyRectangle ,方法display(x, y, w, h),参数分别为左上角坐标+ 宽+ 高。
想要实现的类的方法:display(x1, y1, x2, y2),参数分别为左上角坐标+右下角下标。

方案:使用Adapter模式委托现有的类来完成方法

具体步骤: 先定义一个接口Shape,Shape接口定义一个方法display,再定义一个适配器类Rectangle,实现这个接口,并且实现display方法,实现这个方法可以委托给现有的类LegacyRectangle来实现。最后客户端通过调用接口来完成。

 

2.Decorator 装饰器模式
问题:考虑这样一种情况,我们要实现的一个类具有多种不同的功能,如果直接将不同的功能封装在这个类里面,那么复用性特别差,因为可能以后只改变了一个功能,就需要我们在原有的类上需要的改动很大。这就是装饰器模式就是要解决这个问题了。
解决方法:对每个特性功能构造一个单独的类,通过委派机制利用现有的类增加到我们需要实现的类。以后如果功能改变了,我们只需要委托另一个改变了的功能的类即可。而其他的功能相关的类不需要改变。

UML图解析:
Component接口:定义装饰物执行的公共操作
ConcreteComponent类:起始对象,在其基础上增加功能( 装饰) ,将通用的方法放
到此对象中。
Decorator 抽象类:所有装饰类的基类,里面包含的成员变量component 指向了被装饰的对象。(也就是说被装饰的对象不一定是最基础的ConcreteComponent类,也可以是已经装饰了某个功能的对象。因此装饰器模式可以看做是套娃,一个功能一个功能的套上去)
ConcreteDecorator类:继承了Decorator 抽象类,在该装饰对象上面再装饰具体的功能。

例题:
实现一个冰淇淋对象,为冰淇淋实现具有各种不同水果的功能。

 分析步骤和上面的一样,具体的代码如下:

 

3.Facade 外观模式

外观模式: 客户端需要通过一个统一的接口来访问系统的功能,而不是通过很多个小的接口来访问。主要是方便客户端。

具体例子

 

 

 

4.Strategy 策略模式
问题: 对于一个功能,可能有多个方法来实现(不同的方法开销不同),具体选择哪个方法应该可以让客户端来选择。而不是写死在代码里
解决方法: 为不同的实现算法构造抽象接口,不同的算法实现不同的类,委托给相应的类来完成客户端的需求,运行时动态传入client倾向的算法类实例。
比如:下面这个例子,pay方法有多种实现,具体选择哪种由传入的参数决定,客户端可以选择相应的参数来达到目的。

例子:

 

 

 

5.Template Method 模板模式

问题:做事情的步骤一样,但具体方法不同。
解决方法:共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现。对于差异化的步骤我们需要重写这个抽象类的方法。

 例子:

5.Template Method 模板模式

问题:做事情的步骤一样,但具体方法不同。
解决方法:共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现。对于差异化的步骤我们需要重写这个抽象类的方法。

 例子:

 

 

 6.Iterator 迭代器模式
问题:客户端希望遍历被放入容器/集合类的一组ADT对象,无需关心容器的具体类型,也就是说,不管对象被放进哪里,都应该提供同样的遍历方式
解决思路:让自己的集合类实现Iterable 接口,并实现自己的独特Iterator 迭代器(hasNext, next, remove) ,允许客户端利用这个迭代器进行显式或隐式的迭代遍历:

然后就可以利用迭代器进行遍历了。

 

7.Ending

以上的设计模式大多是利用了委托、抽象成接口(让用户调用接口)、继承等来实现。

 

 

 

土地利用数据从1972到2023:如何利用Landsat和Sentinel数据构建长期变化监测模型 本文详细解析了如何利用1972至2023年的Landsat和Sentinel遥感数据构建土地利用长期变化监测模型。通过多源数据融合策略、时间序列预处理流程和深度学习算法,实现高精度的土地利用分类与变化检测,为生态评估和城市规划提供科学依据。文章还探讨了验证方法和实际应用案例,展示了长期遥感数据在环境建模中的独特价值。 阅读详情

相关推荐

Jetson平台XDMA PCIe驱动安装与测试全指南

本文提供了一份在NVIDIA Jetson平台上安装与测试Xilinx FPGA XDMA PCIe驱动的完整指南。详细阐述了驱动作为高速DMA引擎的核心作用,并逐步讲解了从环境准备、驱动编译、内核模块加载到实际数据传输测试的全过程。内容涵盖常见问题排查与性能优化建议,帮助开发者实现Jetson与FPGA间的高速数据通信,适用于自动驾驶、工业视觉等需要异构计算的应用场景。

weixin_29196315的博客 528

软件构造复习(1) ——面向复用的设计模式

前言:本周80学时的软件构造课程部分正式结束,从今天开始正式梳理并且复习一下软件构造学的知识。 第一天:复习第四章,也是课程的最重要的部分,面向复用的设计模式,面向复用的设计模式有:Adapter(适配器模式)、Decorator(装饰器模式)、Facade(外观模式)、Strategy(策略模式)、Template method(模板模式)、Iterator(迭代器模式)。 1.Adapter 适配器设计模式 适配器模式解决的问题:解决接口间不兼容的问题,我们想要复用现有的已经存在的类,但是现有的类和我们

weixin_45406155的博客 764

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

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

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

设计模式(复用性)

侯捷设计模式(复用性)总结

harry0818的博客 459

Unity Addressable资源缓存路径自定义指南:告别C盘爆满烦恼

本文详细介绍了如何自定义Unity Addressable系统的资源缓存路径,解决其默认存储在C盘导致的磁盘空间不足问题。通过配置CacheInitializationSettings并编写编辑器脚本,开发者可以将缓存迁移至项目目录,实现资源的集中管理,提升团队协作效率与开发环境一致性。

pytorch8learner的博客 475

Setup&Hold互卡问题和Useful Skew的影响

setup和hold互卡问题分析

godping的博客 5097

设计模式--可复用面向对象软件的基础(第一章 引言)

第一章 引言一、什么是设计模式二、SmalltalkMVCSmalltalk MVCSmalltalkMVC中的设计模式三、描述设计模式四、设计模式的编目五、组织编目六、设计模式怎样解决设计问题七、怎样选择设计模式八、怎样使用设计模式 一、什么是设计模式 一般而言,一个模式有四个基本要素: 1、模式名 一个助记名,它用一两个词来描述模式的问题、解决方案和效果; 2、问题 描述了应该在何时使用模式,它解释了设计问题和问题存在的前因后果; 3、解决方案 描述了设计的组成成分、它们之间的相互关系及各自的职责和协作

我与黑夜 815

父子Agent架构:解决AI系统上下文污染的技术方案

在AI系统设计中,上下文管理是核心挑战之一。传统单Agent架构在处理复杂任务时,常面临上下文无限膨胀导致的信息淹没和性能下降问题。父子Agent架构通过职责分离和上下文隔离机制,采用分而治之的思想,将大任务拆解为多个子任务由专门子Agent处理。该架构中父Agent负责任务规划和结果汇总,子Agent执行具体任务后立即销毁中间状态,通过精炼摘要进行通信。这种设计不仅能有效控制上下文长度,还能提升系统稳定性和执行效率,特别适用于编程辅助、自动化测试等需要多步骤处理的场景。父子Agent架构体现了计算机科学中

weixin_42531710的博客 353

设计模式七大原则---合成复用原则

设计模式 c++ 合成服用原则

jiyanghao19的博客 1646

pytorch中的wheel文件

whl 文件是 Python 的一个软件包分发格式,用于在 Python 中安装软件包。它是 Python Wheel 的缩写,也被称为 wheel 文件。这种文件格式旨在简化 Python 软件包的安装和分发。对于 PyTorch 而言,它提供了预编译的 .whl 文件,您可以通过 pip 安装这些文件来快速方便地安装 PyTorch。这些 .whl 文件是已经编译好的二进制分发文件,可以直接安装在您的 Python 环境中,而无需再进行编译。

bj_zhb的博客 3129

V-REP(Cooprliesim EDU)自学笔记 实现UR5机械臂末端按轨迹移动

V-REP(Cooprliesim EDU)自学笔记 实现UR5机械臂末端按轨迹移动

xu_white的博客 7583

软件构造第四章——委派,六种复用设计模式

一.委派的定义 委派的定义很简单,一个对象请求另一个对象的功能罢了。 就是自己不干活,而交给别人干,自己负责调度,负责管。委派本身在我看来并不强大,强大的是委派与继承的共用。 二.委派的分类 委派中A对象调用B对象,根据B对象的来源不同,可以分为不同的种类。 依赖:B对象是动态传入A,并且A不保存B对象。B对象只是与A的方法依赖。这是临时性的委派。 关联: B作为A的成员被保存。 关联分为两类:组...

wangbichen的博客 1402

以 Joule 驱动的生成式开发:把需求文档直接变成可运行的 SAP 应用

摘要:SAP BTP的AI助手Joule正在改变开发方式,支持从自然语言描述自动生成数据模型、服务、UI及测试代码。在SAP Business Application Studio中,Joule能根据业务需求生成结构化代码,并提供代码补全、重构、解释等功能。开发者需注意避免上传敏感数据,并对AI生成的代码进行人工审核。Joule特别针对ABAP开发进行了优化,提供符合SAP规范的代码建议,帮助迁移遗留系统。此外,它还能快速生成CAP项目原型,但所有AI生成内容都需经过严格测试验证。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 343

HIT 软件构造 面向复用的设计模式

设计模式 除了类本身,设计模式更强调多个类/对象之间的关系和交互过程—比接口/类复用的粒度更大 分为创建型模式、结构型模式、行为类模式 结构型模式 adapter(适配器模式) 什么时候使用 将某个类/接口转换为client期望的其他形式 同故宫增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类 模型结构 其实它的本质就是使用一个中间的类,将原来的方法隔离,为原来的...

陈泊舟的博客 4026

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

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【软件构造】5.3 面向复用的设计模式

面向复用的设计模式 结构型模式 1.Adapter 适配器模式 将某个类/接口转换为client期望的其他形式 增加一个接口,将已存在的子类封装起来,client面向接口编程,隐藏具体子类 示例: interface Shape{ void display(int x1,int y1,int x2,int y2); } class Rectangle implements Shape{ v...

fndfnd的博客 284

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

软件构造4.3面向复用的设计模式

设计模式:针对软件设计中给定环境中经常出现的问题的通用的、可重用的解决方案。除了类本身,设计模式更强调多个类/对象之间的关系和交互过程—比接口/类复用的力度更大。 面向复用的设计模式主要有以下几种: 结构模式 (通过改变类的结构,使类具有新的特性。) 适配器模式 当用户希望的接口形式(参数形式)和已经实现的方法接口(可复用的方法)不匹配时,需要设计一个适配器接口,适配器中所有API的格式都符合用户...

qq_43323454的博客 219

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

软件构造面向可复用性的技术-2(设计模式)

软件构造面向可复用性的技术-2结构型模式适配器模式(Adapter)装饰器模式(Decorator)外观模式(Facade)行为模式策略模式模板模式迭代器模式 结构型模式 适配器模式(Adapter) 将某个类/接口转换为client期望的其他形式。通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。 装饰器模式(Decorator) 每个子类实现不同的特性,为对象增加不同侧面的特性,对每一个特性构造子类,通过为委派机制增加到对象上。即使用到了子类型也使用到了委派

weixin_44114721的博客 383

面向复用的设计模式(哈工大软件构造)

  在学习第四章的学习中,主要讲解了面向复用性的编程,其中介绍了许多面向复用编程的设计模式,需要我们多加注意,以及在实践中高效使用。

Hey_BlingBling的博客 298

【软件构造】课件精译(十二)面向复用的设计模式

为什么需要面向复用的设计模式 除了类本身,设计模式更强调多个类/对象之间的关系和交互过程,比接口/类复用的力度更大 设计模式分类 创建型模式:关心如何创建对象 结构型模式:处理类或对象的组合关系 行为型模式:关注如何交付和分配责任 一、结构型模式 (1)适配器模式 意图:将某个类/接口转换为client期望的其他形式 适配器可以解决接口不兼容问题 通过增加一个接口,将已存在的子类封装起来,clie...

无极阁 413

面向可复用性和可维护性的设计模式-软件构造学习总结08

这篇文章是我对软件构造课程的面向可复用性和可维护性的设计模式章节的学习总结,以供未来使用。文章中的图片均来自课程教师的讲义。设计模式总述创建型模式结构型模式行为型模式各种模式之间的共性和联系。

YDDonald的博客 1298

HIT 软件构造lab3总结之 面向可复用性编程的6种设计模式

前言 在软件设计的时候,我们要充分的复用我们的代码,这样可以给我们节省很多时间,可以少打很多重复的代码。下面就是节省6种设计模式,这6种设计模式主要基于继承和委派两种机制,给出的高效复用的思想。 适配器模式(Adapter) 有的时候,我们在以前就实现某些功能或写过某些类,或某些类的某些方法,这些方法的功能我想复用,但是由于不同的项目场景不同,方法对应的参数不同了,怎么办呢?如果这些参数是可以转化成以前的参数类型,那还可以接着复用,这就是适配器模式。 举一个例子,比如我的有一个U盘,是正常的USB接口,但我

wangdefa9898的博客 374

软件构造复习——面向复用性可维护性的设计模式

CarloFeng的博客 307

软件构造-面向可复用性和可维护性的设计模式

设计模式

445

软件构造 面向可复用性和可维护性的设计模式

对课程第十一章进行一个总结

qq_63312644的博客 345

软件构造系列(七)一种面向可复用和可维护的设计模式

说白了就是合理利用继承,委托,接口以达到最大程度的抽象,这样复用性就会高,然后抽象好改,所以可维护性也会高,多说无益,像往常一样直接举例说明。 现在我们要构造两个人,一个小明,一个小红,每个人有两个操作,吃和睡,小明吃得多,睡得多,小红吃得少,睡得少。那么开始构造,直接上图:

weixin_44135985的博客 289

软件构造感悟之面向可复用性和可维护性的设计模式

工厂方法模式的目的是定义一个用于创建对象的接口,让子类决定实例化哪一个类。例如,我们有一个日志记录器,它可以将日志记录到文件中,但是我们需要将日志记录到数据库中,我们可以使用适配器模式,将数据库适配成日志记录器。模板模式定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响到使用算法的客户。迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。模板模式利用继承与重写实现。

m0_62681079的博客 216
上一篇: 软件构造之面向对象编程(OOP)
下一篇: 软件构造之判断对象相等的一些思考
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇宙无穷,盈虚有数

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值