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

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

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

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

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

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

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

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

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

例1 PhoneDemo.java

 1  package cn.itcast.chapter04.decorator;

 2  /**

 3  * 手機(jī) 

 4  */

 5  interface Phone{

 6    // 手機(jī)的功能

 7    void action();

 8  }

 9  /**

 10  * 非智能手機(jī) 

 11  */

 12 class Non_SmartPhone implements Phone{

 13   // 非智能機(jī)具有打電話的功能

 14   public void action() {

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

 16   }

 17 }

 18 /**

 19  * 智能手機(jī) 

 20  */

 21 class SmartPhone implements Phone{

 22   private Phone nonSmartPhone;

 23   public SmartPhone(Phone nonSmartPhone){

 24     this.nonSmartPhone = nonSmartPhone;

 25   }

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

 27   public void action() {

 28     nonSmartPhone.action();

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

 30   }

 31 }

 32 public class PhoneDemo {

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

 34     Phone nPhone = new Non_SmartPhone(); 

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

 36     nPhone.action();

 37     Phone smartPhone = new SmartPhone(nPhone);

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

 39     smartPhone.action();

 40   }

 41 }

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

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

裝飾模式代碼

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


猜你喜歡:

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

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

java高級(jí)軟件工程師

0 分享到:
和我們?cè)诰€交談!