设计模式之装饰模式
2016-03-06 19:54
281 查看
装饰模式主要是为了扩展被装饰类的功能,而且是动态的.装饰类中需要注入被装饰对象,且装饰类和被装饰类都需要实现同一个接口.
装饰模式步骤如下:
编写一个类,实现与被装饰的类相同的接口,目的是使他们有相同的行为
定义一个实例变量,引用被装饰对象,目的和原来的老对象进行交接
定义构造方法,把被装饰对象注入进来(也可以使用其他方式注入)
对于不需要改写的方法,调用被装饰对象的.
对于要改写的方法,改写即可
装饰类和被装饰类实现同一个接口
被装饰的类
装饰类
测试类
装饰模式步骤如下:
编写一个类,实现与被装饰的类相同的接口,目的是使他们有相同的行为
定义一个实例变量,引用被装饰对象,目的和原来的老对象进行交接
定义构造方法,把被装饰对象注入进来(也可以使用其他方式注入)
对于不需要改写的方法,调用被装饰对象的.
对于要改写的方法,改写即可
装饰类和被装饰类实现同一个接口
package design.decorator; /** * 装饰类和被装饰的类都会实现这个接口 * * @author Minhellic * */ public interface Sourcable { /** * 演示在装饰类中重写这个方法 */ public void method_1(); /** * 演示在装饰类中直接调用被装饰类的方法 */ public void method_2(); }
被装饰的类
package design.decorator; /** * 被装饰的类 * @author Minhellic * */ public class Source implements Sourcable { @Override public void method_1() { System.out.println("Source.method_1 ..."); } @Override public void method_2() { System.out.println("Source.method_2 ..."); } }
装饰类
package design.decorator; /** * 装饰类,实现和被装饰类同样的接口 * 改写需要改写的方法,对于不需要改写的方法,直接调用注入的被包装类的方法 * @author Minhellic * */ public class Decorator implements Sourcable { //定义被包装类的实例,以便调用其中的方法 private Source source; //通过构造方法将被包装类注入进装饰类 public Decorator(Source source) { this.source = source; } /** * 在装饰类中,改写这个方法 */ @Override public void method_1() { System.out.println("Decorator.method_1 ..."); } /** * 在装饰类中,调用被装饰类的方法 */ @Override public void method_2() { source.method_2(); } }
测试类
package design.test; import design.decorator.Decorator; import design.decorator.Sourcable; import design.decorator.Source; public class Test { public static void main(String[] args) { /* * 创建接口的实例对象时,使用的是装饰类的实例, * 使用构造方法将被装饰类注入进去 */ Sourcable decorator = new Decorator(new Source()); decorator.method_1(); decorator.method_2(); } }
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- C#、ASP.NET通用扩展工具类之TypeParse
- Lua编程示例(二):面向对象、metatable对表进行扩展
- Windows Powershell扩展类型系统
- C#、ASP.NET通用扩展工具类之LogicSugar
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用
- 深入解析C#设计模式编程中对建造者模式的运用
- SQL Server下几个危险的扩展存储过程
- jQuery 学习第七课 扩展jQuery的功能 插件开发
- 运行Node.js的IIS扩展iisnode安装配置笔记
- 基于MySql的扩展功能生成全局ID