zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    UVA 1152 4 Values whose Sum is 0
    IOI 2006 Pyramid
    CTSC 2000 冰原探险
    IOI 2009 Mecho
    IOI 2011 Rice Hub 米仓
    NOIP 2013 火柴排队 程序
    USACO 2004 MooFest 奶牛集会
    USACO Training Section 3.1 Contact
    动态加载Ribbon功能区
    Ribbon2: 创建动态的Ribbon库
  • 原文地址:https://www.cnblogs.com/newwind/p/5656724.html
Copyright © 2011-2022 走看看