java设计模式----装饰器模式
Decorator裝飾器,顧名思義,就是動態地給一個對象添加一些額外的職責,就好比為房子進行裝修一樣。因此,裝飾器模式具有如下的特征:
它必須具有一個裝飾的對象。
它必須擁有與被裝飾對象相同的接口。
它可以給被裝飾對象添加額外的功能。
用一句話總結就是:保持接口,增強性能。
裝飾器通過包裝一個裝飾對象來擴展其功能,而又不改變其接口,這實際上是基于對象的適配器模式的一種變種。它與對象的適配器模式的異同點如下。
相同點:都擁有一個目標對象。
不同點:適配器模式需要實現另外一個接口,而裝飾器模式必須實現該對象的接口。
先寫一個接口類:Sourcable
package model;public interface Sourcable {public void opration();}
?
?再設置一個實現類:Source,重寫方法。
package model;public class Source implements Sourcable{public void opration(){System.out.println("原始類方法");}}
?裝飾器類?Decorator1.java?采用了典型的對象適配器模式,它首先擁有一個?Sourcable?對象?source?,該對象通過構造函?數進行初始化。然后它實現了?Sourcable.java?接口,以期保持與?source?同樣的接口,并在重寫的operation()?函數中調用??source?的?operation()?函數,在調用前后可以實現自己的輸出,這就是裝飾器所擴展的功能
?
package model;public class Decorator1 implements Sourcable{private Sourcable sourcable;public Decorator1(Sourcable sourcable){super();this.sourcable=sourcable;}@Overridepublic void opration() {System.out.println("第一個裝飾器前");sourcable.opration();System.out.println("第一個裝飾器后");}}
?
再建兩個輸出不同提示的裝飾器Decorato2.java?,Decorator3.java?
?
package model;public class Decorator2 implements Sourcable{private Sourcable sourcable;public Decorator2(Sourcable sourcable){super();this.sourcable=sourcable;}@Overridepublic void opration() {System.out.println("第二個裝飾器前");sourcable.opration();System.out.println("第二個裝飾器后");}}
?
?
package model;public class Decorator3 implements Sourcable{private Sourcable sourcable;public Decorator3(Sourcable sourcable){super();this.sourcable=sourcable;}@Overridepublic void opration() {System.out.println("第三個裝飾器前");sourcable.opration();System.out.println("第三個裝飾器后");}}
?
測試下:
?
package model;public class DecoratorTest {public static void main(String[] args) {Sourcable source=new Source();//裝飾類對象Sourcable sc=new Decorator1(new Decorator2(new Decorator3(source)));sc.opration(); }
}
?
?輸出結果為:
第一個裝飾器前
第二個裝飾器前
第三個裝飾器前
原始類方法
第三個裝飾器后
第二個裝飾器后
第一個裝飾器后
?
?
?
?
?
轉載于:https://www.cnblogs.com/JAYIT/p/5000852.html
總結
以上是生活随笔為你收集整理的java设计模式----装饰器模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Node搭建多人聊天室
- 下一篇: Thymeleaf 入门