你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

设计模式——结构型模式之装饰者(类比+图解,一文看懂装饰者模式)

2021/12/24 16:34:07

设计模式

系列文章:

一、创建型模式——工厂模式
二、创建型模式——单例模式、原型模式
三、创建型模式——建造者模式
四、结构型模式——装饰者模式


文章目录

  • 设计模式
    • 前言
      • 一、装饰者模式的定义
      • 二、实例类比
        • 2.1 一个小栗子(图标设计中的装饰者思想)
        • 2.2 设计图解
      • 三、区分工厂、建造者和装饰者
    • 求赞


前言

设计模式是进行实际开发的基石,是前人不断总结试错得出的宝贵开发经验,也是开发人员之间相互理解共同设计的关键标准。学习设计模式能够帮助我们初学者更好理解结构化的开发流程,摆脱只会写一段代码而不能上升为一个项目的不上不下的尴尬处境

什么是结构型设计模式?

结构型设计模式体现如何将类对象结合在一起形成更有效的结构,按照静态的观点,结构型设计模式是一种有效表达复杂对象的设计方法;按照动态观点,结构型设计模式能够有效组合类/对象设计出高效重用的功能


一、装饰者模式的定义

装饰者模式(Decorator Pattern)又叫包装模式、包裹模式: 能够将 责任(方法)动态添加到对象上,实现了比继承更灵活的扩展方式。也就是说:通过用新对象包裹覆盖原对象,在不改变基类的情况下提供了原对象方法(共有方法)的同时,也可以使用新对象的方法了。具体见下图:
在这里插入图片描述
在原有类上进行装饰、装饰后还可以再装饰,可以不断根据需求覆盖原方法,也可以利用原方法再附加新方法(非常的灵活啊)

二、实例类比

2.1 一个小栗子(图标设计中的装饰者思想)

现在“保护伞公司”需要设计一批图标来标识不同的生态园区——都需要一个基本的图标做底板,但是还需要不同的颜色,不同的“环保”等级等组合来设计。

利用装饰者设计模式思想——把底板作为基础类(被装饰者),其他的颜色、“环保”等级、园区名称各自作为装饰者类。一个设计过程和使用过程如下图:

2.2 设计图解

在这里插入图片描述通过层层装饰,可以动态的添加属性,相较于继承实现扩展的方法,装饰者模式的方法更加灵活,可以随意添加组合避免不必要的浪费

如继承实现了Color、Name、Level三个属性设置和相关方法,但是某些地方不需要设置颜色or不需要等级就浪费了该方法,造成了不必要设计,而且全继承在一个子类中导致修改起来也很麻烦

三、区分工厂、建造者和装饰者

首先:前两种是创建型模式——主要功能是负责对象的创建;而装饰者模式是结构型模式——负责对象的组装。

然后:

  1. 工厂模式:大体上的设计思想是使用一个“工厂”类负责生产哪种对象,又根据生产目标的复杂性和种类多少分为简单工厂(少量单类“产品”)、工厂方法(大量单类“产品”)、抽象工厂(大量多类组合“产品”)三种模式。
  2. 建造者模式:为了维护复杂对象的创建,拥有固定的设置流程但是需要配置多种参数的对象。具体通过监督类(Director类)实现流程自动化、建造类(Builder类)实现参数重用配置、产品类(Product类)作为输出。
  3. 装饰者模式:实现装饰对象对本体对象的包装,解决动态附加方法or属性的问题,是继承的一种更灵活的实现。具体见上。

求赞

作者长期更新,如果觉得本文还算不错的话,请给我一个大大的赞!!!
如果非常赞同这篇文章,请关注我,持续了解更多精彩博文!!!

作者主攻Java Web方向,平时长期更新Java Web基础概念文章,以及算法和数据结构——【一日双题—见微知著】系列。同时设计模式系列也会尽快一月内完结