装饰器设计模式初探(Java实现)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器设计模式初探(Java实现)相关的知识,希望对你有一定的参考价值。

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

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

    技术分享

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

 

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

    

 1 interface Component {
 2     void method();
 3 }
 4 class Coffee implements Component {
 5 
 6     @Override
 7     public void method() {
 8         // TODO Auto-generated method stub
 9         System.out.println("倒入咖啡");
10     }
11     
12 }
13 class Decorator implements Component {
14     public Component comp;
15     public Decorator(Component comp) {
16         this.comp = comp;
17     }
18     @Override
19     public void method() {
20         // TODO Auto-generated method stub
21         comp.method();
22     }
23     
24 }
25 class ConcreteDecorateA extends Decorator {
26     public Component comp;
27     public ConcreteDecorateA(Component comp) {
28         super(comp);
29         this.comp = comp;
30     }
31     public void method1() {
32         System.out.println("倒入牛奶");
33     }
34     public void method2() {
35         System.out.println("加入糖 ");
36     }
37     public void method() {
38         super.method();
39         method1();
40         method2();
41     }
42 }
43 class ConcreteDecorateB extends Decorator {
44     public Component comp;
45     public ConcreteDecorateB(Component comp) {
46         super(comp);
47         this.comp = comp;
48     }
49     public void method1() {
50         System.out.println("加入巧克力");
51     }
52     public void method() {
53         super.method();
54         method1();
55     }
56 }
57 public class TestDecoratePattern {
58     public static void main(String[] args) {
59         Component comp = new Coffee();
60         comp.method();
61         System.out.println("--------------------------------------------------");
62         Component comp1 = new ConcreteDecorateA(comp);
63         comp1.method();
64         System.out.println("--------------------------------------------------");
65         Component comp2 = new ConcreteDecorateB(comp1);
66         comp2.method();
67         System.out.println("--------------------------------------------------");
68         Component comp3 = new ConcreteDecorateB(new ConcreteDecorateA(new Coffee()));
69         comp3.method();
70         System.out.println("--------------------------------------------------");
71         Component comp4 = new ConcreteDecorateA(new ConcreteDecorateB(new Coffee()));
72         comp4.method();
73     }
74 }

    

    运行结果:

    技术分享

 

    装饰器设计模式可以使得我们自由的,以任意顺序导入巧克力,牛奶,咖啡和糖。可以实现多层,任意顺序的装饰。真是牛~

以上是关于装饰器设计模式初探(Java实现)的主要内容,如果未能解决你的问题,请参考以下文章

装饰器初探

JAVA设计模式初探之装饰者模式

初探装饰器模式

Python初探第二篇-装饰器和迭代器,生成器

Python 装饰器初探

编程模式之Go语言如何实现装饰器