首页 > 代码库 > 【设计模式】—— 装饰模式Decorator

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

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

  模式意图

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

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

  应用场景

  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.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 stub10         System.out.println("ConcreteComponent operation()");11     }12     13 }14 class Decorator implements Component{15     private Component component;16     @Override17     public void operation() {18         // TODO Auto-generated method stub19         System.out.println("before decorator!");20         component.operation();21         System.out.println("after decorator!");22     }23     public Decorator() {24         // TODO Auto-generated constructor stub25     }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!

 

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