【设计模式】—— 装饰模式Decorator

  前言:【模式总览】——————————by xingoohtml

  模式意图

  在不改变原来类的状况下,进行扩展。ide

  动态的给对象增长一个业务功能,就功能来讲,比生成子类更方便。this

  应用场景

  1 在不生成子类的状况下,为对象动态的添加某些操做。spa

  2 处理一些能够撤销的职责。code

  3 当不能使用生成子类来扩充时。component

  模式结构

 

  Component 外部接口,用于定义外部调用的形式。提供默认的处理方法。htm

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方法,并添加本身的业务操做。blog

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.xingoo.decorator;  2 interface Component{  3     public void operation();  4 }  5 class ConcreteComponent implements Component{  6 
 7  @Override  8     public void operation() {  9         // TODO Auto-generated method stub
10         System.out.println("ConcreteComponent operation()"); 11  } 12     
13 } 14 class Decorator implements Component{ 15     private Component component; 16  @Override 17     public void operation() { 18         // TODO Auto-generated method stub
19         System.out.println("before decorator!"); 20  component.operation(); 21         System.out.println("after decorator!"); 22  } 23     public Decorator() { 24         // TODO Auto-generated constructor stub
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!
相关文章
相关标签/搜索