佛山网站建设公司88电子商务网站建设运营

news/2025/10/8 4:34:07/文章来源:
佛山网站建设公司88,电子商务网站建设运营,wordpress情感主题,网站建设前端学什么语言文章目录 一、简介二、基本概念三、装饰模式的结构和实现类图解析#xff1a;装饰器的实现方式继承实现#xff1a;组合实现#xff1a;继承和组合对比 四、装饰模式的应用场景五、与其他模式的关系六、总结 一、简介 装饰模式是一种结构型设计模式#xff0c;它允许动态地… 文章目录 一、简介二、基本概念三、装饰模式的结构和实现类图解析装饰器的实现方式继承实现组合实现继承和组合对比 四、装饰模式的应用场景五、与其他模式的关系六、总结 一、简介 装饰模式是一种结构型设计模式它允许动态地向对象添加额外的功能。 二、基本概念 装饰模式定义在不改变原有对象结构的情况下通过对其进行包装拓展以达到增强功能的目的。装饰器角色负责给组件对象附加额外的功能实现了与组件具有相同接口的装饰器类。组件角色拥有核心功能的原始对象。抽象组件角色定义了组件对象的接口可以是抽象类或接口。具体组件角色实现了抽象组件角色的具体对象。 三、装饰模式的结构和实现 类图解析 // 抽象组件角色 public interface Component {void operation(); }// 具体组件角色 public class ConcreteComponent implements Component {public void operation() {// 实现核心功能System.out.println(这是具体组件角色的核心功能);} }// 装饰器角色 public abstract class Decorator implements Component {protected Component component;public Decorator(Component component) {this.component component;}public void operation() {component.operation();} }// 具体装饰器角色 public class ConcreteDecorator extends Decorator {public ConcreteDecorator(Component component) {super(component);}public void operation() {// 添加额外功能代码System.out.println(具体装饰器角色执行核心组件的功能前111);super.operation();// 添加额外功能代码System.out.println(具体装饰器角色执行核心组件的功能后2222);} }客户端代码示例 Component component new ConcreteComponent(); // 创建具体组件对象 component.operation(); // 调用核心功能Component decoratedComponent new ConcreteDecorator(component); // 使用具体装饰器装饰组件 decoratedComponent.operation(); // 调用增强功能装饰器的实现方式 继承实现 具体装饰器继承装饰器抽象类通过重写父类方法实现功能拓展继承实现方式 // 抽象组件角色 interface Component {void operation(); }// 具体组件角色 class ConcreteComponent implements Component {public void operation() {// 执行核心功能System.out.println(执行核心功能);} }// 抽象装饰器角色 abstract class Decorator implements Component {protected Component component;public Decorator(Component component) {this.component component;}public void operation() {component.operation();} }// 具体装饰器角色 class ConcreteDecoratorA extends Decorator {public ConcreteDecoratorA(Component component) {super(component);}public void operation() {super.operation();// 添加额外的功能代码System.out.println(添加额外的功能代码A);} }class ConcreteDecoratorB extends Decorator {public ConcreteDecoratorB(Component component) {super(component);}public void operation() {super.operation();// 添加额外的功能代码System.out.println(添加额外的功能代码B);} }// 使用示例 public class Main {public static void main(String[] args) {// 创建具体组件对象Component component new ConcreteComponent();// 创建具体装饰器对象并包装组件对象Component decoratorA new ConcreteDecoratorA(component);Component decoratorB new ConcreteDecoratorB(decoratorA);// 调用装饰器的操作方法实现功能的拓展decoratorB.operation();} }组合实现 具体装饰器持有装饰器抽象类的实例通过调用实例方法实现功能拓展。 2. 组合实现方式 // 抽象组件角色 interface Component {void operation(); }// 具体组件角色 class ConcreteComponent implements Component {public void operation() {// 执行核心功能System.out.println(执行核心功能);} }// 装饰器角色 class Decorator implements Component {protected Component component;public Decorator(Component component) {this.component component;}public void operation() {component.operation();} }// 具体装饰器角色 class ConcreteDecoratorA extends Decorator {public ConcreteDecoratorA(Component component) {super(component);}public void operation() {super.operation();// 添加额外的功能代码System.out.println(添加额外的功能代码A);} }class ConcreteDecoratorB extends Decorator {public ConcreteDecoratorB(Component component) {super(component);}public void operation() {super.operation();// 添加额外的功能代码System.out.println(添加额外的功能代码B);} }// 使用示例 public class Main {public static void main(String[] args) {// 创建具体组件对象Component component new ConcreteComponent();// 创建具体装饰器对象并包装组件对象Component decoratorA new ConcreteDecoratorA(component);Component decoratorB new ConcreteDecoratorB(decoratorA);// 调用装饰器的操作方法实现功能的拓展decoratorB.operation();} }这两个示例中都有一个抽象的组件角色Component一个具体的组件角色ConcreteComponent以及几个具体的装饰器角色ConcreteDecorator。具体装饰器角色在构造函数中接收一个组件对象并在自身的 operation() 方法中调用组件对象的 operation() 方法并添加额外的功能代码。 在使用示例中我们创建了具体组件对象和具体装饰器对象并将它们进行组合最后调用装饰器的 operation() 方法来实现功能的拓展。 继承和组合对比 在装饰器模式中继承实现和组合实现是两种常见的方式。它们在实现装饰器功能时略有不同 继承实现 优点 简单直接通过继承抽象装饰器类具体装饰器可以直接重写方法并添加额外功能。可复用性高可以轻松地创建多个具体装饰器并进行组合拓展。 缺点 类爆炸每个具体装饰器都需要创建一个新的类当装饰器数量增多时类的数量也会大量增加。静态结构类的组合和功能拓展是在编译时静态决定的无法动态地改变组合方式。 组合实现 优点 灵活组合具体装饰器持有抽象装饰器对象可以在运行时动态地组合不同的装饰器对象实现不同的功能拓展组合。类结构简单相对于继承实现不需要创建过多的具体装饰器类类结构相对简单。 缺点 代码复杂度较高需要在具体装饰器中额外处理抽象装饰器对象的方法调用。可能需要在抽象装饰器中定义一些默认实现以避免空指针异常。 根据具体需求和设计考虑可以选择适合的实现方式。继承实现适用于静态且数量有限的装饰器组合而组合实现适用于动态和灵活的装饰器组合。两种实现方式都能实现装饰器模式的基本功能只是在代码结构和使用方式上略有差异。 四、装饰模式的应用场景 动态添加功能当需要在不修改现有代码的情况下动态地给对象添加新功能时装饰模式可以很好地满足这一需求。避免子类爆炸利用装饰模式可以避免通过创建大量子类来实现各种功能组合的问题。透明性 vs. 安全性装饰模式中的装饰器和组件具有相同的接口使得对于客户端而言无需关心具体是使用了原始组件还是装饰器对象实现了透明性。 五、与其他模式的关系 装饰模式 vs. 适配器模式装饰模式侧重于给对象动态添加功能而适配器模式则是为了让不兼容的类能够协同工作。装饰模式 vs. 组合模式装饰模式和组合模式都采用了递归组合的思想但装饰模式着重于给对象添加功能而组合模式着重于构建对象的树形结构。装饰模式 vs. 桥接模式桥接模式将抽象部分和实现部分解耦而装饰模式则是在不改变对象结构的基础上拓展其功能。 六、总结 装饰模式通过包装对象实现功能的动态拓展使得系统具有更高的灵活性和可扩展性。它应用广泛在动态添加功能、避免子类爆炸等场景都很有价值。同时要注意使用装饰模式时保持透明性和安全性的平衡确保装饰器和组件具有一致的接口。

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

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

相关文章

用dw做的网站怎么上线iis7部署网站

声明&#xff1a;以下这函数&#xff0c;使用场景再lambda表达式中使用 std::weak_ptr<websockets_session> weak_self() { return std::weak_ptr<websockets_session>(shared_from_this()); }

网站开发培训深圳网站设计包括哪些内容

背景 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题&#xff0c;在用户体验至上的今天&#xff0c;解决好应用的性能问题能带来非常大的收益。Java 作为最流行的编程语言之一&#xff0c;其应用性能诊断一直受到业界广泛关注。可能造成 Java 应用出现性能问题的因…

北京移动端网站设计二建证书查询官网入口

编写equals()和hashCode()方法需要遵循以下原则&#xff1a; 1. equals()方法&#xff1a; - 使用instanceof关键字检查传入的对象是否为当前类的实例。 - 检查传入的对象是否为null。 - 检查传入的对象的类型是否与当前对象的类型相同。 - 比较对象的属性是否相等&#x…

电子商务网站建设 项目规划书网站优化种类

目录 一.虚拟机准备 二.基础环境配置&#xff08;各个节点都做&#xff09; 1.IP和hosts解析 2.防火墙和selinux 3.安装基本软件 4.配置时间同步 5.禁用swap分区 6.修改内核参数并重载 7.配置ipvs 三.docker环境&#xff08;各个节点都做&#xff09; 1.配置软件源并…

做资源网站怎么不封网架加工制造厂家

问题陈述&#xff1a; Fibonacci为1200年代的欧洲数学家&#xff0c;在他的著作中曾经提到&#xff1a;若有一只兔子每个月生一只小兔子&#xff0c;一个月后小兔子也开始生产。起始只有一只兔子&#xff0c;一个月后就有两只兔子&#xff0c;二个月后有三只兔子&#xff0c;三…

个人简介网站html代码深圳社保个人网页

三种情形&#xff1a; 1.执行SP时出错&#xff0c;如连接异常&#xff0c;数据库权限异常 2.SP代码中抛出异常 3.返回值/输出参数的值不符合约定 后两种情形需要在异常发生时记录传入SP的参数值&#xff1b;业务逻辑层需要捕获并重抛&#xff0c;以保证UI层提供给用户友好的错误…

网站建设与管理专业实训室辽宁建设工程信息网招标公呿

1、用定积分奇函数和偶函数的性质 2、用常用的基本不等式推出大小 3、用区间相同的情况下被积函数大的定积分大的定理

无锡那家网络公司做网站好深圳网站建设工作

C语言知识点第1章C语言知识点总结(二) 第八节 字符字符常量定义&#xff1a;一对单引号括起来的一个字符。如‘A’、‘a’、‘9’相应字符对应的ASCII编码值(见附录四)字符常量占用一个字节的存储单元(一个字节占8位)重点&#xff1a;表 C语言中常见的转义字符字符形式意义字符…

怎样让网站做301处理为什么访问外国网站速度慢

本文仅供学习使用&#xff0c;总结很多本现有讲述运动学或动力学书籍后的总结&#xff0c;从矢量的角度进行分析&#xff0c;方法比较传统&#xff0c;但更易理解&#xff0c;并且现有的看似抽象方法&#xff0c;两者本质上并无不同。 2024年底本人学位论文发表后方可摘抄 若有…

白箱算力与AI元人文:一场从“求解”到“创造”的范式革命

白箱算力与AI元人文:一场从“求解”到“创造”的范式革命 我们正站在智能演进的历史断层上。一侧,是算力规模指数级增长的“黑箱”帝国,它以其惊人的效率令我们叹服,却又因其决策的不可知性让我们深感不安;另一侧…

app开发网站建设公司哪家好海阳网站制作

322. 零钱兑换 题目&#xff1a; 给一个不同数额硬币的数组和一个目标金额&#xff0c;硬币可取无限次&#xff0c;求用硬币达到总金额的最小硬币数量。&#xff08;求不同组合数/排列数&#xff0c;但是硬币数量最小&#xff09; 思路&#xff1a; 求硬币数量最小&#x…

重庆企业网站制作外包微信官方微网站吗

页面渲染的全过程输入url后&#xff0c;先拿到html文件&#xff0c;html下载完以后会开始对它进行解析html在解析的过程中&#xff0c;如果文本里有外部资源链接&#xff0c;比如css、js和img时&#xff0c;会立即启用其他线程下载这些静态资源。特殊的是当遇到js文件的时候&am…

正规网站建设的公司香精香料网

1. 独立看门狗IWDG介绍&#xff08;341.45&#xff09; 什么是看门狗&#xff1f; 在由单片机构成的微型计算机系统中&#xff0c;由于单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造成程序的跑飞&#xff0c;而陷入死循环&#xff0c;程序的正常运行被打断&#…

做IT的需要别人打开网站吗文化传播有限公司注册条件

来记录一下做一个springboot项目以及上传至云服务器上过程新建并发布项目注册域名&#xff1a;域名备案发现的问题&#xff1a;在阿里云上面搞了一台个人服务器&#xff0c;当时是双十一打折买的&#xff0c;229好像。有了服务器当然要干点什么&#xff0c;于是做了个springboo…

商城微网站开发微网站wordpress 换域名 403

互联网给人带来便捷的同时&#xff0c;其公开大量的资源也同样给恶意利用者带了便捷&#xff0c;越来越多公开的恶意程序源码降低了对外攻击、入侵的难度&#xff0c;使得安全问题愈加严重。 阿里云安全团队从今年5月份监测到一BOT家族&#xff0c;其样本改写自互联网公开渠道…

如何查看网站使用什么程序做的建设网站需要备案

ORA-30926: 无法在源表中获得一组稳定的行 同时要求在一张表中添加一个字段&#xff0c;由于数据量较大&#xff0c;想使用merge into update的方式将数据 meger into xxx1 t1 using(select * from xxx2 )t2 on(t1.xmt2.xm and t1.dzt2.dz) when matched then update set tra…

vm ubuntu22安装docker

我是mac m1芯片环境,安装了vmware,我在vmware中安装好了ubuntu22.04.3,下一步如何安装docker? 1、安装sshsudo apt updatesudo apt install -y openssh-serversudo systemctl enable sshsudo systemctl start ssh …

浙江杰立建设集团网站会宁网站建设公司

1. 题目 一个机器人位于一个m*n的网格的左上角。 机器人可以在任何时间点移动任何方向&#xff0c;但是每个网格只能达到一次。机器人正试图到达网格的右下角。 有多少种可能的独特路径? 样例 1: 输入: 2 3 输出: 4样例 2: 输入: 3 3 输出: 122. 解题 暴力回溯即可 class …

php电商网站开发流程图网站设计建设方案

文章目录从框架源码学习结构型设计模式适配器模式应用实例案例一&#xff1a;dubbo框架日志适配器Logger接口日志实现类Logger适配器接口LoggerAdapter实现类Logger日志工厂桥接模式应用场景案例&#xff1a;dubbo源码-远程调用模块channelHandler设计ChannelHandler是一个SPI拓…