设计模式-装饰模式简单理解

装饰模式是一种比较简单的模式,为什么要用它呢?怎么用呢?

前期需求:实现三个了A B C,定义相同的调用方法,客户可以有选择的调用任意一个。

我知道对接口编程,于是我定义了一个接口

interface O{

public void do();

}

然后我根据需求定义三个O的实现:A,B,C。

接下来的剧情:

  1. 新需求来了:客户要在O的实现对象上增加功能F1或F2或F3。

  怎么做?现在只有A B C三个,我用if else加上F1 F2 F3的支持:

    if(1) do F1 else if (2) do F2 else if(3) do F3;

    OK了!

  2. 新需求又来了:O的实现类要增加 X ,Y, Z。

  怎么做?我增加三个实现类,然后在实现类上再加上if else支持F1 F2 F3。

  3. 新需求又又来了:功能需要增加对F4 F5 F6的支持。

  怎么做?我再把O的所有的实现类再改一遍,加上if else支持F4 F5 F6。改完了,好累啊!!!但愿需求不要再变化。。。

本来生活可以很简单的呀!我也可以这样做:

反转的剧情:

  1. 新需求来了:客户要在O的实现对象上增加功能F1或F2或F3。

  怎么做?

  class F1 implements O{

    O o = null;

    public F1(O o){this.o = o;}

    public void do(){

  o.do();

     do something about F1

    }
  }

  同样F2 F3也这么做。

  如果用户要用F1的功能的话就可以:new F1(o).do(); ----o为被装饰的对象

  如果要用F1,F2功能:new F2(new F1(o)).do();

  如果要用F1,F2,F3功能:new F3(new F2(new F1(o))).do();

  2. 新需求又来了:O的实现类要增加 X ,Y, Z。

  怎么做?我只需要增加三个类 X Y Z,实现O接口就好了,至于你怎么用,自己装饰去吧!

  3. 新需求来了:功能需要增加对F4 F5 F6的支持。

  怎么做?简单,跟F1的定义类似啊,分分钟搞定。至于你怎么用,自己装饰去吧!

^^) ,这种俄罗斯套娃模式是不是有种似曾相识的感觉呢?java IO中输入输出流

采用装饰模式可以把装饰类和被装饰的类解耦,二者都可以增加新的类,而彼此不受影响。Client调用时决定装饰类和被装饰类之间关系。

原文地址:https://www.cnblogs.com/onetwothree/p/10157150.html

时间: 2024-10-24 08:35:08

设计模式-装饰模式简单理解的相关文章

大话设计模式总结(28种设计模式定义+简单理解)

大话设计模式这本书写的非常有创意,非常适合我这种新手.用了大约两个星期的时间看完了这本书,代码全部都敲了一遍,虽然没有一点基础,但是还是领略到了面向对象的威力.看完之后再也不想使用面向过程的语言了,比如VB,想当初我也是VB狂热者,但是现在我几乎不想再使用了.现在只想着写点什么用上它几种设计模式. 可能是第一次接触这些东西,有些感觉看懂了,但是很难应用到实际编程中:有些感觉没看懂,但是还能说出那么点东西来.听七期学长说他们当初看了两遍,要求能背着写出代码,不知道这次我们八期要求怎么这么低,我只看

设计模式的简单理解——单例模式

简单理解 单例模式是指进程生命期内,某个类型只实例化一个对象.这是一种通过语言特性实现的编程约束.如果没有约束,那么多人协同编码时,就会出现非预期的情况. 下面以内存池做例子,假设其类型名为MemoryPool.内存池的本意是统一管理全局内存,优化内存分配,提升性能,记录内存分配信息方便追溯问题,需要全局只有一个实例对象. 第一阶段:没有任何约束 因为没有任何约束,大家会各自实例化MemoryPool对象来使用.最终一片混乱,根本达不到最初使用内存池的目的. 第二阶段:编程语言外的约束 在Mem

JavaScript设计模式的简单理解

设计模式可以理解为一系列的代码框架,我觉得主要涉及封装的概念.把实现某一功能的代码段封装在函数中,可以方便调用,同时利于代码的复用,提高了代码的可维护性.下面简单介绍一下几种设计模式的个人感受. 1.单例模式 类似于一个类只有一个对象实例. 假设一个物品只能归属于一个人所有.. 2.构造函数模式 类似于c中的构造函数,可以创建特定类型的对象,然后对象里可以声明不同的变量及成员函数,还可以有不同的参数.就像我想做个凳子,我可以做成普通的凳子,有长宽高之类的属性及可以做的功能函数,此外我也可以做成高

24种设计模式的简单理解

1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 4.建造者模式 5.原型模式 6.单例模式 7.适配器模式 8.桥接模式 9.组合模式 10.装饰模式 11.外观模式 12.享元模式 13.代理模式 14.职责链模式 15.命令模式 16.解释器模式 17.迭代器模式 18.中介者模式 19.备忘录模式 20.观察者模式 21.状态模式 22.策略模式 23.模板方法模式 24.访问者模式

设计模式之简单理解装饰器模式与运用

1.什么是装饰器模式 ? 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. ? 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能. 2.装饰器模式的重要组成部分 ①装饰器模式特点: (1) 装饰对象和真实对象有相同的接口.这样客户端对象就能以和真实对象相同的方式和装饰对象交互. (2) 装饰对象包含一个真实对象的引用(reference

装饰设计模式的简单理解

//装饰设计模式.//不修改原对象,对原有对象的功能进行增强.class Person{    void chifan()    {        System.out.println("吃饭");    }} class NewPerson{    private Person p;    NewPerson(Person p)    {        this.p = p;    }    public void newChifan()    {        System.out

初识设计模式之--简单工厂

作为一个刚刚入门的菜鸟.虽只学到了些许编程语言的皮毛(或者连皮毛都算不上),但是随着时间和学习的深入,"设计模式"这一专业术语便慢慢浮现在眼前. 到底何为设计模式呢?它的出现将会给我们带来哪些帮助?......等等一系列问题便会出现在我们脑海中.俗话说:问题才是探究知识的钥匙.就让我们带着 自己的疑问一同来学习设计模式. 首先,我们先来认识一下什么是设计模式,以及运用设计模式的优点. 设计模式的简单理解:模式是在某一背景下某个问题的一种解决方案.1.复用解决方案——通过复用已经公认的设

设计模式之简单工厂模式

设计模式之简单工厂模式 动机:         不暴露实例化逻辑来创建对象.通过公共的接口创建新的对象.         这是一个简单的实现,客户端需要一个product,但是client不直接使用new对象,而是通过提供需要的对象信息来找factory得到新的product.         这个factory实例化一个具体的product并返回(转化成抽象的类),client段使用这个抽象的类而不用考虑它具体的实现. 应用举例:        也许工厂模式是使用最多的模式之一.举个例子,一个

设计模式初探—简单工厂模式

为什么要学习设计模式? 可重用.可维护.可扩展.灵活性好 什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 简单工厂模式的好处? (1)将具体业务和实现进行分离 (2)将多个具体业务之间进行解耦 解决的问题? 单独的类来创造