java设计图案_java – 装饰图案设计
我对模式很新,我正在研究装饰模式,我必须编写一个程序.
在线学习,我找到了一个Decorator模式的例子(它是Java伪代码):
class Solution1
{
static interface Component
{
void doStuff();
}
static class MyComponent implements Component
{
public void doStuff()
{
// ...
}
}
static class ComponentDecorator implements Component // This is the Decorator pattern.
{
private final Component component;
public ComponentDecorator(Component component)
{
this.component = component;
}
public void doStuff()
{
this.component.doStuff();
}
}
static class ComponentDecorator1 extends ComponentDecorator
{
public ComponentDecorator1(Component component)
{
super(component);
}
private void doExtraStuff1()
{
// ...
}
public void doStuff()
{
super.doStuff();
doExtraStuff1();
}
}
static class ComponentDecorator2 extends ComponentDecorator
{
public ComponentDecorator2(Component component)
{
super(component);
}
private void doExtraStuff2()
{
// ...
}
public void doStuff()
{
super.doStuff();
doExtraStuff2();
}
}
public static void main(String[] args)
{
MyComponent c = new MyComponent();
ComponentDecorator1 cd1 = new ComponentDecorator1(c);
ComponentDecorator2 cd2 = new ComponentDecorator2(cd1);
cd2.doStuff(); // Executes Component.doStuff, ComponentDecorator1.doExtraStuff1, ComponentDecorator2.doExtraStuff2
}
};
当我分析这个例子时,我意识到在过去我做了一个非常相似的模式但是以不同的方式:
import java.util.*;
class Solution2
{
static interface Component
{
void doStuff();
}
static class MyComponent implements Component
{
public void doStuff()
{
// ...
}
}
static class ComponentDecorator implements Component // This is NOT the Decorator pattern!
{
private final List components = new ArrayList();
public ComponentDecorator()
{
}
public ComponentDecorator addComponent(Component component)
{
this.components.add(component);
return this;
}
public void removeComponent(Component component) // Can Decorator do this?
{
// ...
}
public void doStuff()
{
for(Component c : this.components) c.doStuff();
}
}
static class ComponentDecorator1 implements Component
{
public ComponentDecorator1()
{
}
private void doExtraStuff1()
{
// ...
}
public void doStuff()
{
doExtraStuff1();
}
}
static class ComponentDecorator2 implements Component
{
public ComponentDecorator2()
{
}
private void doExtraStuff2()
{
// ...
}
public void doStuff()
{
doExtraStuff2();
}
}
public static void main(String[] args)
{
ComponentDecorator cd = new ComponentDecorator();
cd.addComponent(new MyComponent());
cd.addComponent(new ComponentDecorator1());
cd.addComponent(new ComponentDecorator2());
cd.doStuff(); // Executes MyComponent.doStuff, ComponentDecorator1.doExtraStuff1, ComponentDecorator2.doExtraStuff2
}
}
在我看来,第二个例子可以在可以使用Decorator模式的相同情况下使用,但它更灵活(例如,您可以删除或重新排序列表中的组件),所以我的问题:
>解决方案1(正确的装饰模式)是否比解决方案2更好?为什么?
>是否可以添加用于删除解决方案1中的实例的函数?
>是否可以在解决方案1中添加重新排序实例的功能?
java设计图案_java – 装饰图案设计相关推荐
- java软件架构设计方案_Java软件架构设计慨论
开始之初的架构设计决定着软件产品的生死存亡."好的开始相当于成功一半". 开始的架构设计也是最难的,需要调研同类产品的情况以及技术特征,了解当前世界上对这种产品所能提供的理论支持和 ...
- java闹钟程序设计_JAVA课程设计_闹钟的设计与实现项目-报告_附源代码.doc
JAVA课程设计_闹钟的设计与实现项目-报告_附源代码 第2章 MACROBUTTON AcceptAllChangesInDoc [双击此处键入1级标题] PAGE 2 - PAGE 1 - .. ...
- java课程设计培训班_Java课程设计
课程设计--博客作业五子棋(201521123009 张晨晨) •团队课程设计博客链接 •个人负责模块或任务说明 五子棋的绘制 棋盘的绘制 重新开始功能的实现 悔棋功能的实现 •自己的代码提交记录截图 ...
- java课程广告语_java课程设计 广告牌.doc
java课程设计 广告牌 广告屏的设计 班级:计算机系0703班 学号:14072400599 姓名:王俊 成绩: 设计描述: 做一个广告屏,显示一段文字,能够对文字的颜色.字体.字号等修改. 设计要 ...
- java游戏课程设计报告_java课程设计报告游戏_相关文章专题_写写帮文库
时间:2019-05-14 00:00:44 作者:admin 课 程 设 计 课程名称 Java语言课程设计 题目名称 人事管理系统的设计与实现 学生学院 应用数学学院 专业班级 学 号 学生姓名 ...
- java 课程设计 计算器_JAVA课程设计-计算器(201521123028 李家俊)
1.团队课程设计博客链接 2.个人负责模板或任务说明 主要负责计算器图形界面 包括操作按钮,菜单项以及输出面板的设计 3.自己的代码提交记录截图 4.自己负责模块或任务详细说明 代码分析: 主类中有如 ...
- java主窗体设计代码_java窗体设计+GUI经典代码全放送
[实例简介] java窗体设计经典代码,手把手叫你如何设计java窗体,编写应用程序. [实例截图] [核心代码] 57641e3b-d82c-4f28-bb29-35f951c1158d └── j ...
- java课程设计 成绩_Java课程设计—学生成绩管理系统(201521123004-林艺如)
1.团队课程设计博客 2.个人负责模块或任务说明 ①.Menu Menu.jsp 在页面中给出提示,用HTML的,与下一个跳转页面进行连接,即点击后进入下一个页面 MenuTeacher.jsp 利用 ...
- java 密码生成器_Java课程设计-随机密码生成器
1.团队课程设计博客链接 2.个人负责模板 设计程序运行界面,数据的输入,判断数据输入类型的错误,判断密码类型是否选择. 3.自己的代码提交记录截图 4自己负责模块或任务详细说明 (一)总体设计 1. ...
最新文章
- UIAlertController
- 操作系统内存管理-Linux版
- 在灾难发生之时,你在Facebook的社交定位或许能救你一命
- QT的QFileOpenEvent类的使用
- 如何5分钟秒懂Java之基础入门篇 第一个hello word
- arcgis在面内创建随机点
- 那些年,我写过的设置Windows系统变量的vbs脚本
- 和docket的第一次亲密接触
- mask rcnn属于dnn么_基于OpenCV DNN的 MaskRCNN 目标检测与实例分割
- Python处理CSV大文件特定行数据
- [导入]如何在标题栏上增加按钮
- An'droid TextView
- mysql +cobar_数据库中间件Cobar功能探究
- moss2007安装部署历程 .
- mac连接iphone闪断解决办法
- 苏门答腊岛地震 苏门答腊9.1级地震 2004年苏门答腊地震 印尼苏门答腊地震 印尼苏门答腊岛地震
- asp在线音乐系统音乐网站 音乐盒
- vs c语言打印心形情书,最美C语言情书(输出心形图案).doc
- QEMU搭建ARM linux开发环境
- 质量冷知识:TRIZ,一个被人忽略的管理工具
热门文章
- php将数组转为字符串的方法
- 假设成年人的体重和身高存在此种关系: 身高(厘米)-100=标准体重(千克) 如果一个人的体重与其标准体重的差值在正负5%之间,显示“体重正常”,其他则显示“体重超标”。编写程序,能处理用户输入的
- 用计算机时按错了按什么键,电脑键盘不能打字了按哪个键恢复?
- RFID破解三两事(原作者:YunFree)
- 赛客乐u无线路由器测速服务器繁忙,有线测速正常,无线测速慢怎么办?
- 儿童玩具外贸出口认证知识干货
- java二维数组坐标_Java 二维数组
- Apollo 笔记(03)— Cyber RT Python 接口(channel 读和写、server/client 通信、record 文件读写信息查询、timer 时间定时器操作)
- 如何在PowerPoint中嵌入字体
- 飞桨paddlespeech 语音唤醒初探