裝飾者模式(Decorator)

前言:繼承是實現類複用的重要手段,但卻不是惟一的手段,經過類的關聯組合一樣能夠作到,並且若是使用得當比經過繼承更富有彈性。「裝飾器模式」就是經過組合來實現相似複用和包裝,這就是OO設計的另外一個原則「合成複用原則」:則是儘可能使用合成/聚合的方式,而不是使用繼承。設計模式

概念:容許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬於結構型模式,它是做爲現有的類的一個包裝。ide

     代碼實現:       測試

     1.Component:定義一個對象接口,能夠給這些對象動態地添加職責。this

     2.ConcreteComponent: 定義一個對象,能夠給這個對象添加一些職責。spa

     3.Decorator: 維持一個指向 Component 對象的指針,並定義一個與 Component 接口一致的接口。設計

     4.ConcreteDecorator:向組件添加職責。代理

 

public interface Component {

    void method();

}

public class ConcreteComponent implements Component {
    @Override
    public void method() {
        System.out.println("this is old method");
    }
}

public   class Decorator implements  Component {
    private Component component;

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

    @Override
    public void method() {
//方法先後裝飾 System.out.println(
"before method,Decorator doing "); component.method(); System.out.println("after method ,Decorator doing"); } } //測試代碼 public static void main(String[] args) { Decorator decorator = new Decorator(new ConcreteComponent()); decorator.method(); }

總結:指針

       其實裝飾器模式和代理模式很像,上面的代碼就和靜態代理同樣(我的理解),只是目的不同而已,一個用於代理,一個用於裝飾,就好像武俠的打鬥現場沒人手裏都有一把劍,有人拿來殺人,有人拿來救人,不必糾結他們的區別。學會靈活使用就好了。code

       優勢:能夠動態擴展一個對象的功能。component

       缺點:類太多,繼承結構複雜。

相關文章
相關標籤/搜索