这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。

主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。

为了避免子类数量的快速膨胀,我们可以用装饰模式为对象动态的增加功能。

这些功能应该是没有相互关联和先后顺序的。

举例来说,一个人可以穿各种不同的装扮,如果为每套打扮生成一个子类,那么子类的数量将爆炸。

可以将装饰模式应用进来,使用衣物装饰人。

来看UML图:

Component类是公共基类,定义了show方法。

Person类继承Component类,实现show方法。

Cloth对象将Component类作为其实例变量。

Trouser和TShirts类实现了show方法。

来看具体代码:

public abstract class Component {public abstract void show();
}

Component定义一个虚方法。

public class Person extends Component {private String name = null;public Person(String name) {this.name = name;}public void show() {System.out.println("我是" + name);}
}

Person实现了这个虚方法。

public class Cloth extends Component {protected Component component = null;public Cloth(pers.zcy.decorator.Component component) {super();this.component = component;}@Overridepublic void show() {if(component != null){component.show();}}}

Cloth类是装饰器的基类,其中包含一个Component实例对象,在show中调用这个实例对象的show方法。

public class Trouser extends Cloth {public Trouser(Component component) {super(component);// TODO Auto-generated constructor stub}@Overridepublic void show(){super.show();System.out.println("我穿了裤子");}
}public class TShirts extends Cloth {public TShirts(Component component) {super(component);}@Overridepublic void show(){super.show();System.out.println("我穿了T恤");}
}

这两个类重写show方法,同时显式调用父类方法。

public class DecoratorDemo {public static void main(String[] args) {Person person = new Person("Mike");Cloth tshirts = new TShirts(person);Cloth trousers = new Trouser(tshirts);trousers.show();}
}

  

转载于:https://www.cnblogs.com/zcy-backend/p/6670652.html

设计模式3:装饰模式相关推荐

  1. 设计模式之装饰模式20170726

    结构型设计模式之装饰模式: 一.含义 动态地给一个对象添加一些额外的职责.就增加功能来说,装饰模式相比生成子类更为灵活. 通俗来讲,装饰模式是对类的功能进行加强或减弱. 二.代码说明 1.主要有两个角 ...

  2. java设计模式之装饰模式_Java中的装饰器设计模式

    java设计模式之装饰模式 装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模 ...

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

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

  4. 设计模式之装饰模式详解(附应用举例实现)

    文章目录 1 装饰模式介绍 2 装饰模式详解 2.1 装饰模式结构 2.2 装饰模式实现 2.3 装饰模式应用举例 3 透明装饰模式和半透明装饰模式 1 装饰模式介绍 在生活中,我们往往会给图片增加一 ...

  5. 设计模式之 装饰模式

    设计模式之 装饰模式 概述: 装饰模式(Decorator Pattern) 又叫装饰者模式:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也 ...

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

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

  7. 设计模式之三 装饰模式

    1.场景模拟 这样让想起了老李,我跟老李是很要好的哥们,当然他不像我还是光棍,所以他不光有友情还有爱情了,不过,就在最近几天他们吵架啦,什么原因?就不多说啦,总之身为男人的老李还是决定主动认错挽回女方 ...

  8. 大话设计模式之装饰模式

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

  9. (C#)设计模式之装饰模式

    1.装饰模式 动态的给一个对象添加一些额外的职责,就添加功能来说,装饰模式比生成子类更加灵活.*装饰模式是为已有功能动态添加更多功能的一种方式.*装饰模式将原有类中的核心职责与装饰功能分离.简化了原有 ...

  10. JAVA设计模式之装饰模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替 ...

最新文章

  1. 记一次 解决 vue 兼容ie11 的问题
  2. tensorflow object detection API训练错误解决
  3. Android事件机制详解
  4. Spring官方阅读笔记-@Controller官方解析与实例(5.0.12)
  5. 清华发布新版计算机学科推荐学术会议和期刊列表,与CCF有何不同?
  6. springBoot整合rabbitmq并测试五种常用模型
  7. sys.dm_db_wait_stats
  8. c语言默认参数_GCC 11 将默认前端语言改成 C++ 17
  9. MyBatis——13用mybatis实现银行转账
  10. date类型被fastjson变为long类型一串数字
  11. 20200528 前端开发日报
  12. QStyle之PenStyle的CustomDashLine使用
  13. 开源Api后台服务/管理系统 HoServer
  14. P1827 [USACO3.4] 美国血统 American Heritage
  15. 【网络安全】细分领域总览
  16. 采油厂污水选用流量计的类型建议
  17. CAN Open基础知识
  18. 格雷希尔GripSeal外螺纹快速连接器的优点和注意事项
  19. 团队项目--地铁信息查询
  20. C语言期末程序设计(高铁客运订票系统)

热门文章

  1. HelloMyBLOG!!!
  2. [转]虚拟机网络模式简介
  3. jsp的flash小例子
  4. 数据库 -- 由数据库连接池引出的三种设计模式
  5. 计算机应用基础简单实操,浅谈《计算机应用基础》实操课的教学管理
  6. 强制生成32位arm程序_3. 从0开始学ARM-ARM模式、寄存器、流水线
  7. java date dateformat_Java中SimpleDateFormat的使用方法
  8. poj1985 Cow Marathon(树的直径#入门)
  9. 实时数仓入门训练营:Hologres性能调优实践
  10. AI体验馆上线!集成业界领先NLP场景深度迁移学习框架EasyTransfer