設計模式-裝飾模式

裝飾模式

動態的給一個對象添加一些額外的職責,就增長功能來講,裝飾模式相比生成子類更爲靈活。java

  • 一般是繼承關係的替代方案。
  • 經常使用於動態的增長對象的功能。

通用類圖

組件含義

Component: 抽象的,須要被修飾的核心類。
ConcreteComponent: 被修飾的類的具體實現。
Decorator: 抽象的,包含指向Component構件的私有變量。
ConcreteComponent: 裝飾類的具體實現。ide

demo

abstract class Component {
    public abstract void operate();
}

class ConcreateComponent extends Component {
    @Override
    public void operate() {
        System.out.println("do something");
    }
}

abstract class Decorator extends Component {
    private Component component = null;

    public Decorator(Component component) {
        this.component = component;
    }

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

class ConcreteDecorator1 extends Decorator {
    public ConcreteDecorator1(Component component) {
        super(component);
    }

    private void method1() {
        System.out.println("method 1 decorate");
    }

    public void operate() {
        this.method1();
        super.operate();
    }
}

class ConcreteDecorator2 extends Decorator {
    public ConcreteDecorator2(Component component) {
        super(component);
    }

    private void method2() {
        System.out.println("method 2 decorate");
    }

    public void operate() {
        this.method2();
        super.operate();
    }
}

public class Client {
    public static void main(String[] args) {
        Component component = new ConcreateComponent();
        component = new ConcreteDecorator1(component);
        component = new ConcreteDecorator2(component);
        component.operate();
    }
}

結果

相關文章
相關標籤/搜索