裝飾者設計模式-基本實現思路
阿新 • • 發佈:2020-10-26
裝飾者設計模式簡要概述:
裝飾者模式也稱為包裝模式(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); } }
通過測試發現,已經實現小寫轉大寫的功能了。