1. 程式人生 > 實用技巧 >裝飾者設計模式-基本實現思路

裝飾者設計模式-基本實現思路

裝飾者設計模式簡要概述:

裝飾者模式也稱為包裝模式(Wrapper Pattern),屬於結構型設計模式。

該模式對客戶端透明的方式來動態的擴充套件物件,(對擴充套件開放,對修改關閉)

同時該模式也是繼承關係的一種替代方法之一。

  • 抽象元件(Component):定義裝飾方法的規範
  • 被裝飾者(ConcreteComponent):Component的具體實現,也就是我們要裝飾的具體物件。
  • 裝飾者元件(Decorator):持有元件(Component)物件的例項引用,該類的職責就是為了裝飾具體元件物件,定義的規範。
  • 具體裝飾(ConcreteDecorator):負責給構件物件裝飾附加的功能。

程式碼舉例:

業務需求:在不改變原類的情況下,實現資料的小寫轉大寫

裝飾者模式實現的基本要求:

/**
 * 裝飾者模式:
 *  1、裝飾者要實現與目標類相同的介面
 *  2、開閉原則:不修改原有的類,增加新的類
 *  3、裝飾者類中要有目標物件作為成員變數,且目標物件是由帶參構造器傳入的。
 */

  ISomeServlet

//定義裝飾方法的規範
public interface ISomeServlet {
    /**
     * 定義一個小寫轉大寫的方法
     */
    String doSome();
}

  SomeServletImpl

//目標物件
public class SomeServletImpl implements ISomeServlet {
    @Override
    public String doSome() {
        return "zhangzhixi";
    }
}

  

  SomeServletDecorator

/**
 * 裝飾者模式:
 *  1、裝飾者要實現與目標類相同的介面
 *  2、開閉原則:不修改原有的類,增加新的類
 *  3、裝飾者類中要有目標物件作為成員變數,且目標物件是由帶參構造器傳入的。
 */
public class SomeServletDecorator implements ISomeServlet {
    private ISomeServlet someServlet;

    public SomeServletDecorator(ISomeServlet someServlet) {
        this.someServlet = someServlet;
    }
    /**
     * 小寫轉大寫的方法
     */
    public String doSome() {
        return someServlet.doSome().toUpperCase();
    }
}

  測試類

public class Test {
    public static void main(String[] args) {
        //建立目標物件
        ISomeServlet some = new SomeServletImpl();
        //使用目標物件建立裝飾者
        ISomeServlet someServlet = new SomeServletDecorator(some);
        //使用裝飾者的業務方法實現需求
        String doSome = someServlet.doSome();
        System.out.println(doSome);
    }
}

  通過測試發現,已經實現小寫轉大寫的功能了。