返回顶部

Java设计模式(学习整理)----装饰模式

1、概念:

  (在我看来,模式就像是是一种思想,在这种思想的指引下,对代码和结构的一番加工和整合而已!都是套路!)

  装饰模式又称包装(Wrapper)模式,是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。对客户端透明意味着接口不变。

2、问题:

  在OO设计和开发过程中, 经常会遇到下面的情况: 我们需要为已经设计好的类添加新的职责, 通常情况下我们会定义一个新类继承自定义好的类. 由于组合比继承更好(复杂度高,继承深度深等原因,

类图 

3、如何实现装饰:

   (1):继承形式:(不推荐)

       当我们为已经设计好的类添加新的功能的时候,可以创建一个新的类,继承这个现有的类,并在新的子类中添加新的所需功能!但是这样并不好!每当新的功能出现的时候,都需要新建新的继承子类,

    是麻烦了点,并且不怎么符合封装性和松耦合性!

  代码说明:

 1 /**
 2 *假设已经设计好的类如下:
 3 */
 4 class  OldClass {
 5     
 6      //功能1
 7      public  void  method1(){}
 8 
 9     //功能2
10      public  int    method2(){}
11       
12 }

 

现在需要添加新的功能:(继承装饰形式)

 1 /**
 2 *继承装饰形式:
 3 */
 4 class NewClass extends OldClass{
 5 
 6       //原有的功能被继承得到
 7 
 8       //新的功能
 9       public void    method3(){}  
10 }

 

  (2):实现接口形式:(推荐)

      由于Java中是单继承,多实现的,所有不推荐使用继承基类来实现增加新的功能,实现接口的话,就可以在原有类的基础上随意添加新的功能,只有写好对应新功能的接口,在实现即可!

    好处也很明显,符合松耦合的特性和有较强的课扩展性。

代码说明:

 1 /**
 2 *假设已经设计好的类如下:
 3 */
 4 class  OldClass {
 5     
 6      //功能1
 7      public  void  method1(){}
 8 
 9     //功能2
10      public  int    method2(){}
11       
12 }

 

写一个新功能的接口:

1 /**
2 *新功能接口
3 */
4 public  interface  NewClassImp{
5 
6      //新功能抽象方法声明
7      public  void  method3();  
8 }

原有的基类实现新的功能接口:

 1 /**
 2 *添加了新的功能的类
 3 */
 4 class  OldClass  implements NewClassImp{
 5     
 6      //功能1
 7      public  void  method1(){}
 8 
 9     //功能2
10      public  int    method2(){}
11
12    //实现新的功能
13    public void method3(){}      
14 }

 

posted @ 2016-07-09 21:58  小风微灵-彦  阅读(198)  评论(0编辑  收藏  举报
加载中……