设计模式 -- 装饰模式

1,定义:Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality.􏰈􏰾􏰱􏲌􏴍􏰓􏰔􏰢􏰣􏸅􏶤􏰓􏲓􏸆􏳮􏰅􏲝􏷢􏱁 􏱺􏶣􏶤􏸇􏱩􏱈􏱣􏰝􏱓􏱔􏰃􏰄􏶍􏱱􏶲􏱗􏳏􏱂􏰿􏳜􏸈􏸉􏱁􏰉(动态的给一个对象添加其余职责,就增长功能来讲,装饰模式比生成子类更加灵活)java

 

2,通用类图ide

 

3,实例代码:flex

/**
   抽象组件
**/
public abstract class Component {
    public abstract void operate();
}

/**
  具体组件实现类
**/
public class ExecuteComponent extends Component{
    @Override
    public void operate() {
        System.out.println("我是真正的执行组件");
    }
}

/**
  装饰组件类
**/
public class Decorator extends Component{
    private Component component;
    public Decorator(Component component){
        this.component = component;
    }

    @Override
    public void operate() {
        component.operate();
    }
}

/**
 具体装饰类1
**/
public class ExecuteDecoratorOne extends Decorator{
    public ExecuteDecoratorOne(Component component) {
        super(component);
    }
    @Override
    public void operate() {
        System.out.println("装饰类1");
        super.operate();
    }
}
/**
 具体装饰类2
**/
public class ExecuteDecoratorTwo extends Decorator{
    public ExecuteDecoratorTwo(Component component) {
        super(component);
    }
    @Override
    public void operate() {

        System.out.println("装饰类 2");
        super.operate();
    }
}

/**
  模式使用
**/
public class Clent {
    public static void main(String[] args){
        Component component = new ExecuteComponent();
        Component component1 = new ExecuteDecoratorOne(component);
        Component component2 = new ExecuteDecoratorTwo(component1);
        component.operate();
        System.out.println("-----------------");
        component1.operate();
        System.out.println("-----------------");
        component2.operate();
    }
}

/**
  运行结果
**/
我是真正的执行组件
-----------------
装饰类1
我是真正的执行组件
-----------------
装饰类 2
装饰类1
我是真正的执行组件

4,模式角色this

(1)抽象构件:􏰒􏰓􏰔􏱬􏹑􏱥􏰂􏰒􏵎􏰣􏱂􏰝􏱺􏰒􏰆􏰇􏱅􏱆􏲎􏳹􏳴􏰅􏰢􏰣􏰝􏰊􏱺􏰒􏲎􏵪􏵧􏰅􏰢 一个接口或者抽象类,定义咱们最核心的对象。code

(2)具体构件:是抽象构件的实现,通常装饰的就是这玩意component

(3)装饰角色:通常是一个抽象类,也继承了抽象构件,通常会有一个私有方法依赖抽象构件对象

(4)具体装饰角色:继承装饰角色,对具体构件进行装饰,或者对装饰角色进行装饰继承

相关文章
相关标签/搜索