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 }
  • 相关阅读:
    C语言小项目-基于TCP协议和SOCKET编程的网络通信系统
    c语言小项目-使用mysql数据库的图书管理系统
    常用功能函数-密码登陆函数
    C++小项目-吃豆子游戏
    C语言小项目-火车票订票系统
    使用单向链表保存大量数据的基础程序框架
    Oracle创建用户并赋予权限
    Fibonacci sequence 求余数
    sizeof运算符来获取各种数据类型在内存中所占字节数--gyy整理
    C++不同进制整数
  • 原文地址:https://www.cnblogs.com/newwind/p/5656724.html
Copyright © 2011-2022 走看看