教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

裝飾設(shè)計模式代碼

更新時間:2020年09月18日15時08分 來源:傳智播客 瀏覽次數(shù):

HttpServletRequestWrapper和HttpServletResponseWrapper作為request和response對象的包裝類,它們都采用了裝飾設(shè)計模式。所謂裝飾設(shè)計模式,指的是通過包裝類的方式,動態(tài)增強某個類的功能。為了大家更好的理解裝飾設(shè)計模式,接下來,先來簡單介紹一下裝飾設(shè)計模式的特點,具體如下:

● 包裝類要和被包裝對象實現(xiàn)同樣的接口。

● 包裝類持有一個被包裝對象,例如在HttpServletRequestWrapper定義的構(gòu)造方法中,需要傳遞一個HttpServletRequest類型的參數(shù)。

● 包裝類在實現(xiàn)接口的過程中,對于不需要包裝的方法原封不動地調(diào)用被包裝對象的方法來實現(xiàn),對于需要包裝的方法自己實現(xiàn)。

了解了裝飾設(shè)計模式的特點,接下來,通過一個案例來演示如何實現(xiàn)裝飾設(shè)計模式,在chapter04工程的cn.itcast.chapter04. decorator包中,編寫PhoneDemo.java程序,具體如例1所示。

例1 PhoneDemo.java

 1  package cn.itcast.chapter04.decorator;

 2  /**

 3  * 手機 

 4  */

 5  interface Phone{

 6    // 手機的功能

 7    void action();

 8  }

 9  /**

 10  * 非智能手機 

 11  */

 12 class Non_SmartPhone implements Phone{

 13   // 非智能機具有打電話的功能

 14   public void action() {

 15     System.out.println("可以打電話");

 16   }

 17 }

 18 /**

 19  * 智能手機 

 20  */

 21 class SmartPhone implements Phone{

 22   private Phone nonSmartPhone;

 23   public SmartPhone(Phone nonSmartPhone){

 24     this.nonSmartPhone = nonSmartPhone;

 25   }

 26   //智能機擁有打電話和玩憤怒的小鳥的功能

 27   public void action() {

 28     nonSmartPhone.action();

 29     System.out.println("可以玩憤怒的小鳥"); // 在非智能機基礎(chǔ)上,功能增強

 30   }

 31 }

 32 public class PhoneDemo {

 33   public static void main(String[] args) {

 34     Phone nPhone = new Non_SmartPhone(); 

 35     System.out.println("--------------手機裝飾前--------------");

 36     nPhone.action();

 37     Phone smartPhone = new SmartPhone(nPhone);

 38     System.out.println("--------------手機裝飾后--------------");

 39     smartPhone.action();

 40   }

 41 }

在例1中,Non_SmartPhone類表示非智能手機,它是屬于被包裝類,SmartPhone類表示智能手機,它是Non_SmartPhone類的包裝類,Non_SmartPhone類和SmartPhone類實現(xiàn)了相同的接口Phone。第22行代碼用于在SmartPhone類中持有被包裝類Non_SmartPhone的對象,第29行代碼用于在被包裝類的基礎(chǔ)上,實現(xiàn)功能的增強。

程序的運行結(jié)果如圖1所示。

裝飾模式代碼

從圖1中可以看出,SmartPhone對Non_SmartPhone類進行包裝后,SmartPhone類型的對象不僅具有了“打電話”功能,還具有了“玩游戲”的功能。


猜你喜歡:

什么是filter?filter是用來做什么的?

filter映射:filter的兩種映射方式

java高級軟件工程師

0 分享到:
和我們在線交談!