装饰设计模式代码

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高级软件工程师

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/253672.html

(0)
上一篇 2022年5月8日
下一篇 2022年5月8日

相关推荐

发表回复

登录后才能评论