设计模式(Design Patterns)-可复用面向对象软件的基础 07:装饰模式(Decorator)
2017-06-01 11:11
661 查看
顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。
Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能,代码如下:
package csdn.article07;
/**
* 公共接口
* @author JiangShuai
*
*/
public interface Sourceable {
public void method();
}
测试类:
package csdn.article07;
/**
* 测试类
* @author JiangShuai
*
*/
public class DecoratorTest {
public static void main(String[] args){
Sourceable source = new Source();
Sourceable obj = new Decorator(source);
obj.method();
}
}
输出:
before decorator!
the original method!
after decorator!
装饰器模式的应用场景:
1、需要扩展一个类的功能。
2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)
缺点:产生过多相似的对象,不易排错!
Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能,代码如下:
package csdn.article07;
/**
* 公共接口
* @author JiangShuai
*
*/
public interface Sourceable {
public void method();
}
package csdn.article07; public class Source implements Sourceable { @Override public void method() { System.out.println("the original method!"); } }
package csdn.article07; public class Decorator implements Sourceable { private Sourceable source; public Decorator(Sourceable source) { super(); this.source = source; } @Override public void method() { System.out.println("before decorator!"); source.method(); System.out.println("after decorator!"); } }
测试类:
package csdn.article07;
/**
* 测试类
* @author JiangShuai
*
*/
public class DecoratorTest {
public static void main(String[] args){
Sourceable source = new Source();
Sourceable obj = new Decorator(source);
obj.method();
}
}
输出:
before decorator!
the original method!
after decorator!
装饰器模式的应用场景:
1、需要扩展一个类的功能。
2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)
缺点:产生过多相似的对象,不易排错!
相关文章推荐
- Design Patterns(设计模式 可复用面向对象软件的基础)
- 设计模式(Design Patterns)-可复用面向对象软件的基础 03:单例模式(Singleton)
- 设计模式(Design Patterns)-可复用面向对象软件的基础 01:简介(Abstract)
- 设计模式(Design Patterns)-可复用面向对象软件的基础 04:建造者模式(Builder)
- 设计模式(Design Patterns)-可复用面向对象软件的基础 08:外观模式(Facade)
- 设计模式(Design Patterns)-可复用面向对象软件的基础 06:适配器模式(Adapter)
- 设计模式(Design Patterns)-可复用面向对象软件的基础 02:工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory)
- 设计模式(Design Patterns)-可复用面向对象软件的基础 05:原型模式(Prototype)和Java中的深、浅拷贝
- 设计模式(Design Patterns——可复用面向对象软件的基础
- 迭代器模式--《设计模式-可复用面向对象软件的基础》Erich Gamma
- 第二章 实例研究:设计一个文档编辑器--《设计模式-可复用面向对象软件的基础》Erich Gamma
- 第一章 引言--《设计模式-可复用面向对象软件的基础》Erich Gamma
- 可复用面向对象软件基础——设计模式(三)之抽象工厂模式
- 可复用面向对象软件基础——设计模式(一)之总览
- 设计模式 可复用面向对象软件的基础(概念你认识多少)
- 学习:设计模式 可复用面向对象软件的基础 【引言】
- 可复用面向对象软件基础——设计模式(五)之建造者模式
- <<设计模式-可复用面向对象软件的基础>>读书笔记
- 第一章 引言--《设计模式-可复用面向对象软件的基础》Erich Gamma
- 设计模式-可复用面向对象软件的基础 [读书笔记]