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 }
时间: 2024-10-10 04:47:48

Java设计模式----装饰模式的相关文章

JAVA设计模式之 装饰模式【Decorator Pattern】

一.概述 动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活.装饰模式是一种对象结构型模式.装饰模式是一种用于替代继承的技术,使用对象之间的关联关系取代类之间的继承关系.在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能. 二.适用场景 装饰原有对象.在不改变原有对象的情况下扩展增强新功能/新特征..当不能采用继承的方式对系统进行扩展或者采用继承不利于系统扩展和维护时可以使用装饰模式. 三.UML类图 四

java设计模式(1)-------单例,工厂,值对象,装饰模式

      java设计模式(1) 先简单的介绍下设计模式吧:是一种解决问题的一种行之有效的思想:用于解决特定环境下.重复出现的特定问题的解决方案. 那为什么我们需要学习设计模式呢? 1.设计模式都是一些相对优秀的解决方案,很多问题都是典型的.有代表性的问题,学习设计模式,我们就不用自己从头来解决这些问题,相当于在巨人的肩膀上,复用这些方案即可,站的高看到远,就是要站在巨人的肩膀上把他们踩下去,嘿嘿. 2.设计模式已经成为专业人士的常用词汇,不懂不利于交流,能让你变得很牛逼哦. 3.能让你设计的

菜鸟版JAVA设计模式—适配器模式,装饰模式,代理模式异同

节前把3个设计模式的学习心得分享了一下,分别是适配器模式,装饰模式,代理模式. 但是似乎越写越有些迷糊,这三种模式都有着一些大同小异的地方,总是有些搞不清. 今天再重新学习下,把学习心得分享给大家一下.这次是结合的我工作中的实际项目. 设计模式,其实是一种解决方法,JAVA作为一种面向对象的语言,对于所有的设计模式在实现上,总是少不了对接口的实现,对抽象类的继承,有时候似乎是为了去实现接口而去写接口,所以在这三种模式的说明代码中,我们都定义了接口这些东西,所以才有了现在的混淆. 先不厌其烦的介绍

Java设计模式学习记录-装饰模式

前言 装饰模式也是一种结构型模式,主要是目的是相对于类与类之间的继承关系来说,使用装饰模式可以降低耦合度.JDK中有不少地方都使用到了装饰模式,例如Java的各种I/O流,javax.swing包中一些图形界面构件功能的增强等地方都运用了装饰模式. 装饰模式 定义 装饰模式的定义是:在不改变原类文件以及不使用继承的情况下,动态的扩展一个对象的功能.装饰模式是通过创建一个包装对象来实现的,也就是用装饰来包裹真实的对象. 举例 还是老规矩,举例说明,在给亲朋好友过生日时会买生日蛋糕,然后生日蛋糕又有

Java设计模式之认识阶段

设计模式是什么? 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 其本质就是继承与接口的组合应用. 为什么要用设计模? 使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.提高工作效率. 设计模式的分类: 设计模式按目的可分为三种类型,共23种. 创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式. 结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式. 行为型模式:模版

java设计模式演示样例

创建模式 1.工厂方法模式(Factory Method)  将程序中创建对象的操作,单独出来处理,创建一个产品的工厂接口,把实际的工作转移到详细的子类.大大提高了系统扩展的柔性,接口的抽象化处理给相互依赖的对象创建提供了最好的抽象模式. public class TestFactoryMethod { public static void main(String[] args) { AnimalFactory af=new DogFactory(); Animal1 a=af.getAnima

2015.09.03 Java设计模式

通常,一个设计模式描述了一个被证实可行的方案.这些方案非常普遍,是具有完整定义的最常用的模式.一般模式有4个基本要素:模式名称(pattern name).问题(problem).解决方案(solution).效果(consequences). 常见的Java设计模式有以下23种: 1.抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 2.适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口.适配器模式使得

java设计模式------装饰着模式

java设计模式-------装饰者模式 装饰者模式 Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案.主要有组件(components)和装饰器(Decorator)组成.要求components和Decorator实现相同的接口或者抽象类(具体类的局限性太大). 设计原则.模式特点.适用性 - 1. 多用组合,少用继承. 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为.然而,如果能够利用

java设计模式-创建型

1.设计模式介绍 1.1 设计模式的概念 1.设计模式是一套被反复使用,多数人知晓,经过分类编码目的的优秀代码设计经验的总结. 2.设计模式贯彻的原理:面向接口编程,而不是面向对象实现. 3.设计模式的目标:降低耦合性,增强灵活性. 1.2 设计模式的要素 1.模式名称 2.问题 3.环境与初始环境 4.解决方案 5.效果 6.举例 7.末态环境 8.推理 9.其他有关模式 10.已知的应用 1.3设计模式的分类 1.创建型 1.1  单例模式 1.2  工厂模式 1.3  抽象工厂模式 1.4