软件设计之装饰模式

装饰模式把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地、按顺序地使用装饰功能包装对象。
 

案例:穿搭。衣柜有帽子、眼镜、冲锋衣和毛衣,现在请你选择一件或多件物品穿搭出门。使用装饰模式打印出不同的方案。

package Decorator;public class Cap extends Finary{@Overridepublic void show() {System.out.print("帽子 ");super.show();}
}
package Decorator;public class Finary extends Person{private  Person component;public void decorate(Person component) {this.component = component;}@Overridepublic void show() {if(component!=null) {component.show();};}
}
package Decorator;public class Glasses extends Finary{@Overridepublic void show() {System.out.print("眼镜 ");super.show();}
}
package Decorator;public class OutdoorJacket extends Finary{@Overridepublic void show() {System.out.print("冲锋衣 ");super.show();}
}
package Decorator;public class Person {private String name;public Person() {}public Person(String name) {this.name = name;}public void show() {System.out.println("(" + name + ")");;}
}
package Decorator;public class Sweater extends Finary{@Overridepublic void show() {System.out.print("毛衣 ");super.show();}
}
package Decorator;public class Client {public static void main(String[] args) {Person z = new Person("张三");Cap cap = new Cap();Glasses glasses = new Glasses();OutdoorJacket oj = new OutdoorJacket();cap.decorate(z);glasses.decorate(cap);oj.decorate(glasses);oj.show();Person l = new Person("李四");Sweater sweater = new Sweater();sweater.decorate(l);sweater.show();}
}

上述模式是透明模式,还有一种模式是半透明模式。二者的主要区别在于半透明模式子类重写父类的方法时并未调用父类的方法,修饰对象无法多次修饰。

冲锋衣 (张三)

毛衣 (李四)

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

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

相关文章

使用VS Code远程开发MENJA小游戏并通过内网穿透分享本地游戏到公网

文章目录 前言1. 编写MENJA小游戏2. 安装cpolar内网穿透3. 配置MENJA小游戏公网访问地址4. 实现公网访问MENJA小游戏5. 固定MENJA小游戏公网地址 推荐一个人工智能学习网站 点击跳转学习 前言 本篇教程,我们将通过VS Code实现远程开发MENJA小游戏,并通…

晶圆测试工艺介绍

第一章、晶圆测试简介 晶圆测试的方式,主要是通过测试机(事先编好程序)和探针台的联动,依靠探针卡的接触衔接,进行晶圆级的芯片测试。 当探针卡Probecard 的探针正确接触晶圆wafer 内一颗 芯片die的每个接触点bondpads…

Sbatch, Salloc提交任务相关

salloc 申请计算节点,然后登录到申请到的计算节点上运行指令; salloc的参数与sbatch相同,该部分先介绍一个简单的使用案例;随后介绍一个GPU的使用案例;最后介绍一个跨节点使用案例; 首先是一个简单的例子&a…

python基本函数

【 一 】python 函数 python中可以将某些具备一定功能的代码写成一个函数,函数可以在一定程度上减少代码的冗余,节约书写代码的时间。 Python中定义好的函数是可以通过函数名称调取并重复使用的模块。 Python有内置函数,如print()函数&…

Revisiting Proposal-based Object Detection阅读笔记

Revisiting Proposal-based Object Detection阅读笔记 论文地址:link Abstract For any object detector, the obtained box proposals or queries need to be classified and regressed towards ground truth boxes. 对于任何物体检测器来说,获得的…

AIGC+医疗专题:生成式人工智能于医疗健康

今天分享的是AI系列深度研究报告:《AIGC医疗专题:生成式人工智能于医疗健康》。 (报告出品方:AREFACT) 报告共计:23页 医疗保健中生成性人工智能的崛起: 在承诺与控制之间导航 Generative Al已经历了大规…

STM32CubeMx+MATLAB Simulink串口输出实验

STM32CubeMxMATLAB Simulink串口输出实验 📌《STM32CubeMxMATLAB Simulink点灯程序》📍相关篇《MATLAB Simulink STM32硬件在环 (HIL)实现例程测试》🔖需要的软件支持包:Embedded Coder Support Package fo…

<软考>软件设计师-3程序设计语言基础(总结)

(一) 程序设计语言概述 1 程序设计语言的基本概念 1-1 程序设计语言的目的 程序设计语言是为了书写计算机程序而人为设计的符号语言,用于对计算过程进行描述、组织和推导。 1-2 程序语言分类 低级语言 : 机器语言(计算机硬件只能识别0和1的指令序列)&…

【Unity动画】Unity 2D动画创建流程

本文以2D为案例,讲解Unity 播放动画的流程 准备和导入2D动画资源 外部导入序列帧生成的 Unity内部制作的 外部导入的3D动画 2.创建动画过程 打开时间轴Ctrl6 选中场景中的一个未来需要播放动画的物体 回到时间轴点击Create一个新动画片段 拖动2D动画资源放入…

龙良曲PyTorch入门到实战 深度学习

文章目录 笔记激活函数与Loss的梯度lesson5 手写数字识别问题lesson6 基本数据类型lesson7 创建tensorlesson8 索引和切片lesson9 维度变换lesson10 broadcastinglesson11 分割和合并lesson12 数学运算lesson13 Tensor统计lesson14 Tensor高阶lesson16 什么是梯度lesson17 常见…

“智能批量复制文件:轻松实现高效且有序的编号复制“

在日常工作中,我们经常需要批量复制文件并给它们编号。这是一项非常繁琐的任务,但是现在,我们向你介绍一种全新的解决方案,帮助你轻松实现文件批量复制并编号。 首先,第一步我们要进入“文件批量改名高手”的主页面并…

Python搭建代理IP池实现接口设置与整体调度

目录 前言 1. 搭建免费代理IP爬虫 2. 将获取到的代理IP存储到数据库中 3. 构建一个代理IP池 4. 实现调度器来调度代理IP池 5. 实现带有代理IP池的爬虫 总结 前言 在网络爬虫中,代理IP池是一个非常重要的组件。由于许多网站对单个IP的请求有限制,…