您的位置:首页 > 编程语言 > Java开发

java设计模式(装饰模式)

2016-04-12 16:12 281 查看

装饰模式实现了可以动态地为原对象扩展方法

装饰对象与被装饰的都实现了同一个接口(或抽象类)

举个例子: 工作 可以边吃东西边工作,也可以边喝东西边工作,还可以工作的时候边吃边喝

创建共同接口 WorkComponent

1 package com.zhanghaobo.patterns;
2
3 public interface WorkComponent {
4     public void work();
5 }

具体工作(被装饰的对象)

1 public class ConcreteWork implements WorkComponent {
2
3     @Override
4     public void work() {
5         System.out.println("我正在工作");
6
7     }
8
9 }

装饰类

1 public class DecoratorWork implements WorkComponent {
2     private WorkComponent work;
3     public DecoratorWork(WorkComponent work){
4         this.work=work;
5     }
6     @Override
7     public void work() {
8         work.work();
9     }
10
11 }

装饰1(喝茶)

1 public class DrinkDecorator extends DecoratorWork {
2
3     public DrinkDecorator(WorkComponent work) {
4         super(work);
5     }
6     @Override
7     public void work() {
8         super.work();
9         drinkTea();
10     }
11     public void drinkTea(){
12         System.out.println("顺便喝茶");
13     }
14
15 }

 

装饰2(吃东西)

public class EatDecorator extends DecoratorWork {

public EatDecorator(WorkComponent work) {
super(work);
}

@Override
public void work() {
super.work();
eatSomething();
}

public void eatSomething(){
System.out.println("顺便吃东西");
}
}

TEST:

public class Client {
public static void main(String[] args) {
//边喝茶边工作
WorkComponent wc=new DrinkDecorator(new ConcreteWork());
wc.work();
System.out.println("================================");
//边吃东西边工作
WorkComponent wc1=new EatDecorator(new ConcreteWork());
wc1.work();
System.out.println("================================");
//边吃边喝地工作
WorkComponent wc2=new DrinkDecorator(new EatDecorator(new ConcreteWork()));
wc2.work();
System.out.println("================================");
//边喝边吃地工作
WorkComponent wc3=new EatDecorator(new DrinkDecorator(new ConcreteWork()));
wc3.work();
}
}

输出结果:

我正在工作
顺便喝茶
================================
我正在工作
顺便吃东西
================================
我正在工作
顺便吃东西
顺便喝茶
================================
我正在工作
顺便喝茶
顺便吃东西

 

转载于:https://www.cnblogs.com/oldcownotGiveup/p/5383123.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: