Java装饰器设计模式初探

作者:Michaelwjw 时间:2021-08-17 17:23:46 

本篇随笔主要介绍用Java实现简单的装饰器设计模式:

先来看一下装饰器设计模式的类图:

Java装饰器设计模式初探

从图中可以看到,我们可以装饰Component接口的任何实现类,而这些实现类也包括了装饰器本身,装饰器本身也可以再被装饰。

下面是用Java实现的简单的装饰器设计模式,提供的是从基本的加入咖啡入手,可以继续加入牛奶,巧克力,糖的装饰器系统。


interface Component {
 void method();
}
class Coffee implements Component {

@Override
 public void method() {
   // TODO Auto-generated method stub
   System.out.println("倒入咖啡");
 }

}
class Decorator implements Component {
 public Component comp;
 public Decorator(Component comp) {
   this.comp = comp;
 }
 @Override
 public void method() {
   // TODO Auto-generated method stub
   comp.method();
 }

}
class ConcreteDecorateA extends Decorator {
 public Component comp;
 public ConcreteDecorateA(Component comp) {
   super(comp);
   this.comp = comp;
 }
 public void method1() {
   System.out.println("倒入牛奶");
 }
 public void method2() {
   System.out.println("加入糖 ");
 }
 public void method() {
   super.method();
   method1();
   method2();
 }
}
class ConcreteDecorateB extends Decorator {
 public Component comp;
 public ConcreteDecorateB(Component comp) {
   super(comp);
   this.comp = comp;
 }
 public void method1() {
   System.out.println("加入巧克力");
 }
 public void method() {
   super.method();
   method1();
 }
}
public class TestDecoratePattern {
 public static void main(String[] args) {
   Component comp = new Coffee();
   comp.method();
   System.out.println("--------------------------------------------------");
   Component comp1 = new ConcreteDecorateA(comp);
   comp1.method();
   System.out.println("--------------------------------------------------");
   Component comp2 = new ConcreteDecorateB(comp1);
   comp2.method();
   System.out.println("--------------------------------------------------");
   Component comp3 = new ConcreteDecorateB(new ConcreteDecorateA(new Coffee()));
   comp3.method();
   System.out.println("--------------------------------------------------");
   Component comp4 = new ConcreteDecorateA(new ConcreteDecorateB(new Coffee()));
   comp4.method();
 }
}

运行结果:

Java装饰器设计模式初探

标签:Java,装饰器模式
0
投稿

猜你喜欢

  • 详解Android自定义控件属性TypedArray以及attrs

    2023-06-20 05:13:41
  • C# 中 System.Index 结构体和 Hat 运算符(^)的使用示例

    2023-02-27 11:40:23
  • c#字符串编码问题的处理解决

    2021-07-06 13:47:49
  • C#调用Win32的API函数--User32.dll

    2022-04-13 16:43:24
  • Android开发笔记之如何正确获取WebView的网页Title

    2022-06-04 07:02:41
  • flutter仿微信底部图标渐变功能的实现代码

    2023-08-18 14:31:39
  • C#中标准的IDispose模式代码详解

    2022-03-27 01:40:05
  • Dynamic和Var的区别及dynamic使用详解

    2022-09-22 13:18:23
  • 深入理解Java抽象类

    2022-08-15 09:17:12
  • C#画图之饼图折线图的实现方法

    2021-12-05 22:26:13
  • C++调用C#的DLL程序实现方法

    2023-02-04 13:58:16
  • 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out

    2022-06-08 16:36:41
  • java异常处理的简单练习

    2023-12-01 02:20:48
  • Java开发完整短信验证码功能的全过程

    2023-05-05 15:35:24
  • Android Studio实现登录界面功能

    2023-06-11 20:27:35
  • Java 手写LRU缓存淘汰算法

    2023-03-03 00:11:19
  • Flutter投票组件使用方法详解

    2022-05-25 19:07:05
  • Android系统设置中的清除数据会清除哪些数据?

    2022-09-04 04:48:13
  • java的多线程高并发详解

    2022-06-28 10:12:06
  • AnyChat的视频会议程序实例详解

    2022-05-12 01:03:43
  • asp之家 软件编程 m.aspxhome.com