更新時(shí)間:2020年09月18日15時(shí)08分 來(lái)源:傳智播客 瀏覽次數(shù):
HttpServletRequestWrapper和HttpServletResponseWrapper作為request和response對(duì)象的包裝類,它們都采用了裝飾設(shè)計(jì)模式。所謂裝飾設(shè)計(jì)模式,指的是通過(guò)包裝類的方式,動(dòng)態(tài)增強(qiáng)某個(gè)類的功能。為了大家更好的理解裝飾設(shè)計(jì)模式,接下來(lái),先來(lái)簡(jiǎn)單介紹一下裝飾設(shè)計(jì)模式的特點(diǎn),具體如下:
● 包裝類要和被包裝對(duì)象實(shí)現(xiàn)同樣的接口。
● 包裝類持有一個(gè)被包裝對(duì)象,例如在HttpServletRequestWrapper定義的構(gòu)造方法中,需要傳遞一個(gè)HttpServletRequest類型的參數(shù)。
● 包裝類在實(shí)現(xiàn)接口的過(guò)程中,對(duì)于不需要包裝的方法原封不動(dòng)地調(diào)用被包裝對(duì)象的方法來(lái)實(shí)現(xiàn),對(duì)于需要包裝的方法自己實(shí)現(xiàn)。
了解了裝飾設(shè)計(jì)模式的特點(diǎn),接下來(lái),通過(guò)一個(gè)案例來(lái)演示如何實(shí)現(xiàn)裝飾設(shè)計(jì)模式,在chapter04工程的cn.itcast.chapter04. decorator包中,編寫(xiě)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ī)擁有打電話和玩憤怒的小鳥(niǎo)的功能
27 public void action() {
28 nonSmartPhone.action();
29 System.out.println("可以玩憤怒的小鳥(niǎo)"); // 在非智能機(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ì)象不僅具有了“打電話”功能,還具有了“玩游戲”的功能。
猜你喜歡:
北京校區(qū)