导引:本篇文章主要讲结构模式中的装饰模式(Decorator)模式的意图场景和结构模式。
关于其它结构类设计模式,请查阅:设计模式:结构类之组合模式(Composite)应用场景和代码示例设计模式:结构类之桥接模式(Bridge)应用场景和代码示例设计模式:结构类之适配器模式(Adapter)应用场景和代码示例创建类设计模式请查阅:设计模式:创建类之抽象工厂(Abstract Factory)场景和代码示例设计模式:创建类之构建者模式(Builder)应用场景和示例设计模式:创建类之FactoryMethod(工厂方法)模式应用场景和示例设计模式:创建类型之原型模式Prototype意图与示例模式意图在不改变原来类的情况下,进行扩展。
动态的给对象增加一个业务功能,就功能来说,比生成子类更方便。
应用场景1- 在不生成子类的情况下,为对象动态的添加某些操作。
2- 处理一些可以撤销的职责。
3- 当不能使用生成子类来扩充时。
模式结构结构代码Component 外部接口,用于定义外部调用的形式。
提供默认的处理方法。
interface Component{ public void operation(); }ConcreteComponent 具体的处理类,用于实现operation方法。
class ConcreteComponent implements Component{ @Override public void operation() { // TODO Auto-generated method stub System.out.println("ConcreteComponent operation()"); } }Decorator 装饰类,内部关联一个component对象,调用其operation方法,并添加自己的业务操作。
class Decorator implements Component{ private Component component; @Override public void operation() { // TODO Auto-generated method stub System.out.println("before decorator!"); component.operation(); System.out.println("after decorator!"); } public Decorator() { // TODO Auto-generated constructor stub } public Decorator(Component component){ this.component = component; } }全部代码 1 package com.nd.decorator; 2 interface Component{ 3 public void operation(); 4 } 5 class ConcreteComponent implements Component{ 6 7 @Override 8 public void operation() { 9 // 业务处理逻辑10 System.out.println("ConcreteComponent operation()");11 }12 13 }14 class Decorator implements Component{15 private Component component;16 @Override17 public void operation() {18 // 实现组件的主功能逻辑19 System.out.println("before decorator!");20 component.operation(); 21 System.out.println("after decorator!");//处理自己的功能逻辑22 }23 public Decorator() {24 // 构造器25 }26 public Decorator(Component component){27 this.component = component;28 }29 30 }31 32 33 public class test {34 public static void main(String[] args) {35 Component component = new Decorator(new ConcreteComponent());36 component.operation();37 }38 } 运行结果before decorator!ConcreteComponent operation()after decorator! 总结本文主要是关于装饰模式的简介,理解其用意和实现结构——装饰模式有点“偷梁换柱”的意思——可以既要被装饰组件的功能,还能按照自己的意思一定进行改变。