成功案例

成功案例
成功案例

設計模式之裝飾模式

浏览量: 159 / 发布时间:2020-05-19/作者:亚博平台网站

裝飾模式顧名思義,亚博平台网站可以理解為“打扮”,主體是不變的,但是我們會根據業務需求對主體進行加工。還是拿我們一直在使用的例子來說明。下圖有3條鏈路,每條鏈路都解決一個主要的問題,比如0-1-2-3解決分析了A問題,我們對節點2增加了裝飾,主體A問題還是可以解決,同時B問題也可以解決。

publicclassConcreteItemimplementsItem{publicConcreteItem(Stringname){System.out.println("創建具體構件角色"+name);}@Overridepublicvoidprocess(Stringname){System.out.println("處理過程"+name);C:抽象裝飾角色:繼承抽象構件角色,并包含具體構件的實例,通過其子類擴展具體構件的功能。

publicabstractclassDecorateItemimplementsItem{privateItemitem;publicDecorateItem(Itemitem){this.item=item;item.process(name);D:具體裝飾角色:繼承抽象裝飾角色,同時給具體構件角色添加其他額外功能,實現額外功能。

publicclassConcreteDecorateItemextendsDecorateItem{publicConcreteDecorateItem(Itemitem){super(item);super.process(name);extraFunc();publicvoidextraFunc(){System.out.println("為具體構件角色增加額外的功能extraFunc()");我們構造測試用例,實現上述截圖里的路徑功能

publicclassDecoratorPattern{publicstaticvoidmain(String[]args){Itemp=newConcreteItem("zero");p.process("zero");p=newConcreteItem("one");p.process("one");p=newConcreteItem("two");p.process("two");p=newConcreteItem("three");p.process("three");System.out.println("節點2增加額外功能,同時解決A和B問題");p=newConcreteItem("zero");p=newConcreteItem("two-four");Itemd=newConcreteDecorateItem(p);d.process("two-four");測試結果如下: