我对模式很新,我正在研究装饰模式,我必须编写一个程序.

在线学习,我找到了一个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 – 装饰图案设计相关推荐

  1. java软件架构设计方案_Java软件架构设计慨论

    开始之初的架构设计决定着软件产品的生死存亡."好的开始相当于成功一半". 开始的架构设计也是最难的,需要调研同类产品的情况以及技术特征,了解当前世界上对这种产品所能提供的理论支持和 ...

  2. java闹钟程序设计_JAVA课程设计_闹钟的设计与实现项目-报告_附源代码.doc

    JAVA课程设计_闹钟的设计与实现项目-报告_附源代码 第2章 MACROBUTTON AcceptAllChangesInDoc [双击此处键入1级标题] PAGE 2 - PAGE 1 - .. ...

  3. java课程设计培训班_Java课程设计

    课程设计--博客作业五子棋(201521123009 张晨晨) •团队课程设计博客链接 •个人负责模块或任务说明 五子棋的绘制 棋盘的绘制 重新开始功能的实现 悔棋功能的实现 •自己的代码提交记录截图 ...

  4. java课程广告语_java课程设计 广告牌.doc

    java课程设计 广告牌 广告屏的设计 班级:计算机系0703班 学号:14072400599 姓名:王俊 成绩: 设计描述: 做一个广告屏,显示一段文字,能够对文字的颜色.字体.字号等修改. 设计要 ...

  5. java游戏课程设计报告_java课程设计报告游戏_相关文章专题_写写帮文库

    时间:2019-05-14 00:00:44 作者:admin 课 程 设 计 课程名称 Java语言课程设计 题目名称 人事管理系统的设计与实现 学生学院 应用数学学院 专业班级 学 号 学生姓名 ...

  6. java 课程设计 计算器_JAVA课程设计-计算器(201521123028 李家俊)

    1.团队课程设计博客链接 2.个人负责模板或任务说明 主要负责计算器图形界面 包括操作按钮,菜单项以及输出面板的设计 3.自己的代码提交记录截图 4.自己负责模块或任务详细说明 代码分析: 主类中有如 ...

  7. java主窗体设计代码_java窗体设计+GUI经典代码全放送

    [实例简介] java窗体设计经典代码,手把手叫你如何设计java窗体,编写应用程序. [实例截图] [核心代码] 57641e3b-d82c-4f28-bb29-35f951c1158d └── j ...

  8. java课程设计 成绩_Java课程设计—学生成绩管理系统(201521123004-林艺如)

    1.团队课程设计博客 2.个人负责模块或任务说明 ①.Menu Menu.jsp 在页面中给出提示,用HTML的,与下一个跳转页面进行连接,即点击后进入下一个页面 MenuTeacher.jsp 利用 ...

  9. java 密码生成器_Java课程设计-随机密码生成器

    1.团队课程设计博客链接 2.个人负责模板 设计程序运行界面,数据的输入,判断数据输入类型的错误,判断密码类型是否选择. 3.自己的代码提交记录截图 4自己负责模块或任务详细说明 (一)总体设计 1. ...

最新文章

  1. UIAlertController
  2. 操作系统内存管理-Linux版
  3. 在灾难发生之时,你在Facebook的社交定位或许能救你一命
  4. QT的QFileOpenEvent类的使用
  5. 如何5分钟秒懂Java之基础入门篇 第一个hello word
  6. arcgis在面内创建随机点
  7. 那些年,我写过的设置Windows系统变量的vbs脚本
  8. 和docket的第一次亲密接触
  9. mask rcnn属于dnn么_基于OpenCV DNN的 MaskRCNN 目标检测与实例分割
  10. Python处理CSV大文件特定行数据
  11. [导入]如何在标题栏上增加按钮
  12. An'droid TextView
  13. mysql +cobar_数据库中间件Cobar功能探究
  14. moss2007安装部署历程 .
  15. mac连接iphone闪断解决办法
  16. 苏门答腊岛地震 苏门答腊9.1级地震 2004年苏门答腊地震 印尼苏门答腊地震 印尼苏门答腊岛地震
  17. asp在线音乐系统音乐网站 音乐盒
  18. vs c语言打印心形情书,最美C语言情书(输出心形图案).doc
  19. QEMU搭建ARM linux开发环境
  20. 质量冷知识:TRIZ,一个被人忽略的管理工具

热门文章

  1. php将数组转为字符串的方法
  2. 假设成年人的体重和身高存在此种关系: 身高(厘米)-100=标准体重(千克) 如果一个人的体重与其标准体重的差值在正负5%之间,显示“体重正常”,其他则显示“体重超标”。编写程序,能处理用户输入的
  3. 用计算机时按错了按什么键,电脑键盘不能打字了按哪个键恢复?
  4. RFID破解三两事(原作者:YunFree)
  5. 赛客乐u无线路由器测速服务器繁忙,有线测速正常,无线测速慢怎么办?
  6. 儿童玩具外贸出口认证知识干货
  7. java二维数组坐标_Java 二维数组
  8. Apollo 笔记(03)— Cyber RT Python 接口(channel 读和写、server/client 通信、record 文件读写信息查询、timer 时间定时器操作)
  9. 如何在PowerPoint中嵌入字体
  10. 飞桨paddlespeech 语音唤醒初探