嗨,您好!

今天,我将展示装饰设计模式的实际应用。 装饰器设计模式是一种广泛使用的设计模式,同时在运行期间处理图形,树木和动态更改。

如果您正在寻找或尝试进行递归,这也是一个不错的选择。 我喜欢它。 在这篇文章中,我们将实现学生装饰。 我们将用学位和医生的头衔装饰它。 看看它如何在现实世界中工作的一个很好的例子。

首先,让我们看一下它最简单的版本的UML图。 之后,我们将以此类推为例。

最简单的UML

请密切注意,因为一旦您了解了所有内容,一切将变得清晰易懂。 这就是我将最简单的模型放在第一位的原因。

了解细节

装饰性是通用接口Decorable的每个具体实现。 装饰器将是抽象类Decorator的每个实现。 定义装饰者的合同,将一个实例包含到可装饰对象中。 让我们深入研究一些代码来修复它:

// 1. COMMON INTERFACE FOR DECORABLES
public interface Decorable {public String getDescription();
}
// 2. THE ABSTRACT DECORADOR WHICH HOLDS A REFERENCE TO DECORABLES
public abstract class Decorator implements Decorable {protected Decorable component;public Decorator(Decorable component){super();this.component=component;}
}

类比我们的学生的例子

让我们首先从UML​​图开始:

普通可装饰女孩

从类比开始。 界面Girl是可装饰的。 GirlDecorator用下面的具体装饰器定义抽象装饰器的合同。

// 1. COMMON INTERFACE FOR DECORABLES
public interface Girl {public String getDescription();
}
// 2. THE ABSTRACT DECORADOR WHICH HOLDS A REFERENCE TO DECORABLES
public abstract class GirlDecorator implements Girl {protected Girl girl;public GirlDecorator(Girl girl){super();this.girl=girl;}
}
// 3. DEFINING CONCRETE DECORATORS
public class Science extends GirlDecorator {public Science(Girl girl) {super(girl);}@Overridepublic String getDescription() {// DECORATES WITH A SCIENCE'S DEGREEreturn girl.getDescription() + "+Like Science";}public void caltulateStuff() {// ADDS NEW FEATURES (METHOD) TO ITSystem.out.println("scientific calculation!");}
}
public class Art extends GirlDecorator {public Art(Girl girl) {super(girl);}@Override public String getDescription() {return girl.getDescription() + "+Like Art";}public void draw() {System.out.println("draw pictures!");}
}
public class Doctor extends GirlDecorator {public Doctor(Girl girl) {super(girl);}@Override public String getDescription() {return girl.getDescription() + "+Like Doctor";}public void calculateStuff() {System.out.println("doctor calculation!");}public void doctorTitle() {System.out.println("doctor title");}
}

装饰物

AmericanGirl和EuropeanGirl是将在运行时以学位和医生名义装饰的装饰,以增强其课程和能力。

// 4. AN AMERICAN GIRL WILL BE DEFINED AS A DECORABLE
public class AmericanGirl implements Girl {private String description="";// NORMAL AMERICAN GIRLpublic AmericanGirl(){super();description = "+American";}@Override public String getDescription() {return description;}
}
public class EuropeanGirl implements Girl {private String description="";public EuropeanGirl() {super();description = "+European";}@Override public String getDescription() {return description;}
}

测试它

现在让我们在实践中看看它的外观。 我们如何在运行时装饰和增强其功能:

public class Client {public static void main(String[] args) {// COMMOM GIRLGirl girl;// CREATING NORMAL AMERICAN GIRLgirl = new AmericanGirl();System.out.println(girl.getDescription());// DECORANTING AMERICANA GIRL WITH SCIENCE'S DEGREEgirl = new Science(girl);System.out.println(girl.getDescription());// DECORANTING AMERICANA GIRL WITH ART'S DEGREEgirl = new Art(girl);System.out.println(girl.getDescription());// EUROPEAN GIRL HAS ALREADY ALL DEGREES   Girl europeia = new Science(new Art(new EuropeanGirl()));System.out.println(europeia.getDescription());// DOCTOR HAS NEW FUNCTIONS    girl = new Doctor(girl);System.out.println(girl.getDescription());// BECAUSE DOCTOR EXTENDS FROM COMMON GIRL, IT CAN DO A DOWNCAST((Doctor)girl).doctorTitle();((Doctor)girl).calculateStuff();// PAY ATTENTION THAT WE USE THE SAME INSTANCE, BUT THEY BEHAVIOR DIFFERENT// AT DIFFERENT TIME SLOTS. THE CLIENT HAS THE IMPRESSION THAT WE HAVE// CHANGED THE IMPLEMENTATION, BUT IN FACT NOT.}
}

就这样! 希望你喜欢!

翻译自: https://www.javacodegeeks.com/2014/08/decorator-design-pattern-applied.html

装饰器设计模式的应用相关推荐

  1. java设计模式之装饰模式_Java中的装饰器设计模式

    java设计模式之装饰模式 装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模 ...

  2. lambda设计模式_使用lambda的装饰器设计模式

    lambda设计模式 随着Java中lambda的出现,我们现在有了一个新工具,可以更好地设计我们的代码. 当然,第一步是使用流,方法引用和Java 8中引入的其他简洁功能. 展望未来,我认为下一步是 ...

  3. 装饰着模式示例_装饰器设计模式示例

    装饰着模式示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的原 ...

  4. Java中的装饰器设计模式

    装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模式的UML表示开始: Con ...

  5. 用装饰器设计模式装饰

    装饰图案是广泛使用的结构图案之一. 此模式在运行时动态更改对象的功能,而不会影响对象的现有功能. 简而言之,此模式通过包装将附加功能添加到对象. 问题陈述: 想像一下我们有一个比萨饼,该比萨饼已经用番 ...

  6. 结构设计模式 - 装饰器设计模式

    结构设计模式 - 装饰设计模式 装饰器设计模式用于在运行时修改对象的功能.同时,同一类的其他实例不会受此影响,因此单个对象将获得已修改的行为.装饰器设计模式是结构设计模式之一(如Adapter Pat ...

  7. java 设计模式 示例_Java示例中的装饰器设计模式

    java 设计模式 示例 Decorator design pattern is used to modify the functionality of an object at runtime. A ...

  8. java学习--装饰器设计模式

    装饰器设计模式 例一:实现对声音的的放大功能 源码: package me.sgyz.study02;/***实现放大器对声音的的放大功能* @ 洛尘曦**/public class Decorate ...

  9. 装饰器设计模式代码套路-咖啡加奶

    装饰器设计模式具体操作: 1.抽象组件:需要装饰的抽象对象(接口或抽象父类) 2.具体组件:需要装饰的对象 3.抽象装饰类:包含了对抽象组件的引用以及装饰着共有的方法 4.具体装饰类:被装饰的对象 案 ...

最新文章

  1. 支持透明窗口显示的webbrowser_支持十点触控!LG推出新透明OLED显示屏
  2. 《大话数据结构》简体中文版勘误
  3. 第一次使用Sourcetree成功上传gitee记录
  4. UI标签库专题二:JEECG智能开发平台Column(列) 子标签
  5. 带你认识传统语音识别技术
  6. Android权限管理
  7. django 钉钉扫码登录
  8. 当程序发布特别慢的时候,如何高效使用Eclipse
  9. Flat-Lattice-Transformer项目经验教训
  10. 【二分答案】【中位数】codeforces 394 bun
  11. 阮一峰ES6入门读书笔记(九):Set 和 Map
  12. 运筹学牛顿法c语言源代码,运筹学与MATlab编程.doc
  13. 广义矩方法(GMM)与动态面板数据简述
  14. 肝了这篇文章,我对服务器硬件有了深刻的认识!
  15. Weights Biases
  16. 转载:老师也吐血的试卷
  17. 苹果开发者账号(公司级)和邓白氏编码(D-U-N-S)申请记录(2015.06)
  18. 5款支持Web端创作的脑图工具,学习一款就够了
  19. 2021前端性能指标研究表(译)
  20. acwing280.陪审团 01背包

热门文章

  1. 交换两个数字的三种方式
  2. 2017蓝桥杯省赛---java---A---4(方格分割)
  3. 服务器母鸡系统,母鸡云服务器
  4. 公共计算机课程思政建设实施方案,公共计算机教研组开设课程思政公开课
  5. chengxuyuan
  6. webpack打包发布
  7. 自己的php工具,用PHP自己编写的站长工具箱
  8. php中对象的遍历输出,PHP中的对象遍历技巧
  9. java快排原理_Java数据结构与算法——快速排序
  10. 顽皮狗 多线程分享_谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!...