java设计模式(装饰模式)
装饰模式实现了可以动态地为原对象扩展方法
装饰对象与被装饰的都实现了同一个接口(或抽象类)
举个例子: 工作 可以边吃东西边工作,也可以边喝东西边工作,还可以工作的时候边吃边喝
创建共同接口 WorkComponent
package com.zhanghaobo.patterns; public interface WorkComponent {
public void work();
}
具体工作(被装饰的对象)
public class ConcreteWork implements WorkComponent { @Override
public void work() {
System.out.println("我正在工作"); } }
装饰类
public class DecoratorWork implements WorkComponent {
private WorkComponent work;
public DecoratorWork(WorkComponent work){
this.work=work;
}
@Override
public void work() {
work.work();
} }
装饰1(喝茶)
public class DrinkDecorator extends DecoratorWork { public DrinkDecorator(WorkComponent work) {
super(work);
}
@Override
public void work() {
super.work();
drinkTea();
}
public void drinkTea(){
System.out.println("顺便喝茶");
} }
装饰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();
}
}
输出结果:
我正在工作
顺便喝茶
================================
我正在工作
顺便吃东西
================================
我正在工作
顺便吃东西
顺便喝茶
================================
我正在工作
顺便喝茶
顺便吃东西
java设计模式(装饰模式)的更多相关文章
- Java设计模式---装饰模式
装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任.换言之,客户 ...
- Java设计模式-装饰模式(Decorator)
顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: Source类是被装饰类,Decorator类是一个 ...
- Java设计模式—装饰模式
装饰模式是一种比较常见的模式. 定义为:动态的给一个对象添加一些额外的职责.就增加功能来说,装饰模式比生成子类更加灵活. 装饰模式的通用类图如下: 装饰模式的构成: 1) 抽象构件(Component ...
- Java设计模式——装饰模式
转载自:http://blog.csdn.net/xu__cg/article/details/53024490 抽象构件 public interface CarInterface { void m ...
- Java设计模式学习记录-装饰模式
前言 装饰模式也是一种结构型模式,主要是目的是相对于类与类之间的继承关系来说,使用装饰模式可以降低耦合度.JDK中有不少地方都使用到了装饰模式,例如Java的各种I/O流,javax.swing包中一 ...
- Java设计模式(7)装饰模式(Decorator模式)
Decorator常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这 ...
- Java设计模式(三) 抽象工厂模式
原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...
- Java设计模式(十二) 策略模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...
- Java设计模式(二) 工厂方法模式
本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...
- Java设计模式(一) 简单工厂模式不简单
摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...
随机推荐
- BZOJ 4269 再见Xor
线性基. 求次大值就是再异或一个线性基好了. #include<iostream> #include<cstdio> #include<cstring> #defi ...
- 解决android sdk manage打开闪退的解决方法
在打开android sdk mangage.exe的时候,一闪而过,在eclipse中出现如下提示: [2015-07-20 13:42:23 - SDK Manager] [SDK Manager ...
- unity, sprite atlas
一, Sprite Packer 可以直接在unity里放碎图,只要将Texture Type选为Sprite(2D and UI),Sprite Mode选为Single,再把想打在一张大图里的碎图 ...
- 设计模式-单键(Singleton)
[摘要] 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性.以及良好的效率. 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例? 这应该 ...
- POJ 2241 Mondriaan's Dream
题意:给一块n×m的空地,用1×2的砖铺,有多少种方案. 解法:状压dp.考虑dp[i][j]表示前i - 1行都铺满时第i行的状态为j时的方案数.对于第i行,每个格子上是否有砖用0和1表示,0表示不 ...
- ylb:子查询(嵌套子查询)和子查询(相关子查询)
ylbtech-SQL Server:SQL Server-子查询(嵌套子查询)和子查询(相关子查询) SQL Server 子查询(嵌套子查询)和子查询(相关子查询). 1,ylb:1,子查询(嵌套 ...
- sessionFactory.getCurrentSession()的引出
当业务逻辑中需要开启事务执行,业务逻辑也要调用底层操作数据库的函数,那函数也要开启事务操作. 如果用sessionFactory.openSession()的话会引起处理不在同一个事务中,会造成出错. ...
- 插入排序 --- 排序算法 --- 算法 --- java
设数组为a[0…n-1]. 1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1].令i=1 2. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间 ...
- CSS3制作苹果风格键盘
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtMAAAEICAIAAAASh+8XAAAgAElEQVR4nOzdaXBU14E3/FPVBVUq5X
- 《深入理解C#》第3版 学习进度备忘
学习资源:<深入理解C#>第3版 知识基础支持: <C# in a nutshell> O Reilly出版社,是一本从头介绍C#的优秀图书.<Essential C#5 ...