教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

天富娱乐注册注册开户 亚娱天空游戏解说员怎么样

更新时间:2020年09月18日15时08分 来源:传智播客 浏览次数:

HttpServletRequestWrapper和HttpServletResponseWrapper作为request和response对象的包装类,它们都采用了装饰设计模式。所谓装饰设计模式,指的是通过包装类的方式,动态增强某个类的功能。为了大家更好的理解装饰设计模式,接下来,先来简单介绍一下装饰设计模式的特点,具体如下:

● 包装类要和被包装对象实现同样的接口。

● 包装类持有一个被包装对象,例如在HttpServletRequestWrapper定义的构造方法中,需要传递一个HttpServletRequest类型的参数。

● 包装类在实现接口的过程中,对于不需要包装的方法原封不动地调用被包装对象的方法来实现,对于需要包装的方法自己实现。

了解了装饰设计模式的特点,接下来,通过一个案例来演示如何实现装饰设计模式,在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("可以玩愤怒的小鸟"); // 在非智能机基础上,功能增强 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类实现了相同的接口Phone。第22行代码用于在SmartPhone类中持有被包装类Non_SmartPhone的对象,第29行代码用于在被包装类的基础上,实现功能的增强。

程序的运行结果如图1所示。

装饰模式代码

从图1中可以看出,SmartPhone对Non_SmartPhone类进行包装后,SmartPhone类型的对象不仅具有了“打电话”功能,还具有了“玩游戏”的功能。


猜你喜欢:

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

filter映射:filter的两种映射方式

java高级软件工程师

0 分享到:
和我们在线交谈!