软件编程
位置:首页>> 软件编程>> java编程>> Java装饰器设计模式初探

Java装饰器设计模式初探

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

标签:Java,装饰器模式

本篇随笔主要介绍用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装饰器设计模式初探

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com