装饰模式

  装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

通过下列代码加深下理解

//通用接口
public interface Learning {public void Learn();}//具体实现类
public class Hero implements Learning {String name;public Hero (String name){this.name=name;}@Overridepublic void Learn() {System.out.println(name+"-正在学习技能ing");}
}//装饰类
public class QHeroDecorate implements Learning {Hero hero ;public QHeroDecorate (Hero hero){this.hero = hero;}@Overridepublic void Learn() {hero.Learn();ReturnCity();}public void ReturnCity(){System.out.println("学习了回城技能");}
}//main测试
public class MainTest {public static void main(String[] args){Hero hero = new Hero("达摩");Learning learning = new QHeroDecorate(hero);learning.Learn();}
}
//输出结果
达摩-正在学习技能ing
学习了回城技能

装饰模式的特点

(1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。
(2) 装饰对象包含一个真实对象的引用(reference)
(3) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。
(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。  

优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

缺点:多层装饰比较复杂。

使用场景: 1、扩展一个类的功能。 2、动态增加功能,动态撤销。

注意事项:可代替继承。

转载于:https://www.cnblogs.com/chenpt/p/9395834.html

大话设计模式之装饰模式相关推荐

  1. 大话设计模式之装饰模式(python实现)

    大话设计模式之装饰模式 使用场景 定义 装饰模式结构图 python实现装饰模式 代码结构图 优点 使用场景 建造过程不稳定,不确定.把所需的功能按照正确的顺序串联起来进行控制. 新加入的东西仅仅是为 ...

  2. 大话设计模式C++版——装饰模式

           女人常说男人喜新厌旧.仅仅见新人笑,那闻旧人哭,但装饰模式(Decorator)却是一种结交新朋友不忘老朋友的设计模式,很适合去古代当老公(现代是不行的.由于仅仅能娶一个老婆了).装饰模 ...

  3. 大话设计模式—装饰模式

    装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原 ...

  4. 大话设计模式——装饰模式

    需求 写一个给人模拟搭配不同服饰的程序,可以给人换各种各样的衣服裤子的形象. 初步实现 需求比较简单,直接上代码: public class Person {private String name;p ...

  5. 设计模式之装饰模式(Decorator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  6. 【Python】《大话设计模式》Python版代码实现

    <大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...

  7. 【大话设计模式】设计模式系统学习大合集

    转载请注明出处:http://blog.csdn.net/column/details/designpatternbylmb.html 为了方便各位网友学习以及方便自己复习之用,将设计模式的系列内容按 ...

  8. 《大话设计模式》读书笔记-索引

    <大话设计模式>读书笔记-第1章 简单工厂模式 <大话设计模式>读书笔记-第2章 策略模式 <大话设计模式>读书笔记-第3章 单一职责原则 <大话设计模式&g ...

  9. 《大话设计模式》读后感

    第一次读<大话设计模式>,是在刚接触C#的时候.疲累于大部头的官方教材中时,无意间翻开了这本生动有趣的书,甚是眼前一亮.由于当时C#基础薄弱,只是把它当小说来看,如饥似渴,饶有滋味,一口气 ...

最新文章

  1. docker配置国内镜像源
  2. 关于installshield安装界面上installshield字样的删除问题
  3. 【讨论贴】关于父实子虚的疑问???
  4. GDCM:提取DICOM文件数据元素值字段的测试程序
  5. 页面滚动到指定class样式位置
  6. 字节输出流的续写和换行
  7. mysql索引及优化
  8. typescript断言
  9. 信用卡套现只要正常还款,银行是不是睁只眼闭只眼?
  10. 【架构师】【数据库基础】【笔记 01】快速了解数据库系统的重要概念01
  11. 简单粗暴的多目标跟踪神器 – DeepSort
  12. HTML 图片加载问题
  13. 借助Sigar API获取操作系统信息
  14. 体验Windows server 2012上安装SQL 2012
  15. Operating System-Thread(3)用户空间和内核空间实现线程
  16. H5页面内实现分享给微信好友功能
  17. 关于NB-IoT的十大问题和答案
  18. MATLAB计算卫星相对位置、速度和加速度
  19. DispatcherServlet详细分析
  20. 学习C的知识点扩展2--make和makefile多文件编译的使用

热门文章

  1. php和python交互-浅析PHP与Python进行数据交互
  2. 简明python教程购买-简明python教程哪版(python看什么书)
  3. winston日志框架
  4. redis中的intset
  5. rocketmq中consumer设计与实现
  6. UVa11809 - Floating-Point Numbers
  7. win8.1升级到win10后 vmware不能连网的问题
  8. Linux中搭建Maven私服
  9. selendroid之inspector
  10. 我在清华当工程师的日子