设计模式——结构型模式三合一(组合、桥接、享元模式,图解分析,入门级设计模式解析)

设计模式

系列文章:

一、创建型模式——工厂模式
二、创建型模式——单例模式、原型模式
三、创建型模式——建造者模式
四、结构型模式——装饰者模式
五、结构型模式——代理、适配器模式
六、结构型模式——外观模式
七、结构型模式——三合一(组合模式、桥接模式、享元模式)


文章目录

  • 设计模式
    • 前言
      • 一、组合模式定义
      • 二、组合模式的简单实例+图解
      • 三、桥接模式的定义
      • 三、桥接模式的案例——实现一个鬼畜画笔
      • 四、享元模式的定义
      • 六、享元模式图解(以共享视频为例)
    • 结尾


前言

该篇作为结构型设计模式结尾,将最后的三个结构型设计模式——组合模式、桥接模式、享元模式三合一进行统一讲解,加量不加价…

  • 期末好忙,各位大哥点个赞再走好吗

首先还是对这三个模式进行一个简要的概括,如下:

  1. 组合模式:适用于将树状的关系表示出来,将类结构设计成层层指向的关系,比如员工管理——boss带各部门主管-主管在带各小组长-小组长在带小组队员
  2. 桥接模式:将可变的功能拆分提取成抽象类,使用时在自由选取组合,比如PS的画笔-选取一个画笔主体-任何引用一种颜色实例and引用一种透明度实例等
  3. 享元模式:池技术的实现之一,就是预先创建好某一堆对象,需要时随时输出指定对象供调用者取用,使用完自动返回,省时省力,节约空间,注意冲突问题

一、组合模式定义

组合模式:也叫合成模式or部分-整体模式,用于描述部分和整体的关系,具体则是将对象组合成树形结构的形式,使得单个对象和组合对象的使用一致。

组合的每个节点都统一实现自一接口,具有添加子节点,返回内容,返回子节点列表,移除指定子节点等操作——非常适合用来设计类似于XX人事管理系统这样的项目。

具体如下:
设计模式——结构型模式三合一(组合、桥接、享元模式,图解分析,入门级设计模式解析)_第1张图片
其中三个元素:

  1. Component抽象作为统一的基类,定义所有节点共有的方法,相当于一个公司成员都有的属性和行为模板
  2. Composite作为分支节点,能够包含一系列子节点,相当于领导层的类,提供对子类的支配
  3. Leaf叶子节点,作为结构的最底层,具有相同方法但是未实现,只负责基础功能

二、组合模式的简单实例+图解

一个简单的设计如下(将手底下有人的干部分实例化为分支节点类,其他的作为基础类,但是都共同继承自职员类——享有相同的操作,组织化的同时对每一个对象都能使用统一的操作)
设计模式——结构型模式三合一(组合、桥接、享元模式,图解分析,入门级设计模式解析)_第2张图片

三、桥接模式的定义

桥接模式:也叫桥梁模式,实现较为简单,将抽象的部分(比如Ps画笔的颜色、透明度等)与其主体分离开,使得其可以独立变化。

其核心目的是实现主体与变化的解耦,比如Ps的画笔组合千变万化,如果单独派生实现需要庞大的类群体,然而用桥接模式——实现画笔主体-颜色抽象等分离,就可以按照如下方式组合,减少类的数量

具体的结构如下:
设计模式——结构型模式三合一(组合、桥接、享元模式,图解分析,入门级设计模式解析)_第3张图片
对类图中的成员解释如下:

  1. Abstraction作为功能主体:提供主要功能,但是其他的附加属性需要桥接模式的抽象部件的具体实例来添加
  2. RefineAbstraction:作为功能主体的一个变化子类,比如某一种特殊画笔,是主体的变化体现
  3. Attribute:抽象属性,作为主体的功能部件的抽象类
  4. ConcreteAttribute:属性的具体变化,比如特定的颜色

三、桥接模式的案例——实现一个鬼畜画笔

画笔除了颜色这一个变化属性之外,还有其他许许多多的变体,都可以抽象成部件,作为桥接模式的一个抽象部件类,为画笔这一神奇的工具提供丰富多彩的组合。

大家也可以开动脑筋,想出更多桥接模式的可用之处,由于篇幅的缘故不再赘述
设计模式——结构型模式三合一(组合、桥接、享元模式,图解分析,入门级设计模式解析)_第4张图片

四、享元模式的定义

享元模式:池技术重要实现方式;由于程序分配过多的对象会损害性能,而且部分对象拥有可共享的属性,只读、不改变状态、易恢复状态的对象;尤其是对于细粒度的模型——

细粒度模型,通俗的讲就是将业务模型中的对象加以细分,从而得到更科学合理的对象模型,直观的说就是划分出很多对象

具体的说就是通过一个享元工厂预先生成一些“元”——共享对象,对外部请求进行响应,输出其中的元,对内管理和初始化元。

具体的UML类图如下:

设计模式——结构型模式三合一(组合、桥接、享元模式,图解分析,入门级设计模式解析)_第5张图片
注意:是否实现Flyweight和是不是共享元没有关系,它只是作为细粒度对象的基类,共享工厂才是享元模式的核心,只有被共享工厂管理的元才属于共享元

  1. FlyweightFactory:享元工厂,具体的功能见上定义
  2. Flyweight:元的基类,所有细粒度对象都共有的方法模板
  3. ConcreteFlyweight:共享元(应该不随使用而被修改,或者限制使用)
  4. UnsharedConcreteFlyweight:不可共享的元
  5. Client:使用元的类,同时拥有工厂(作为元的提供方),共享元(正在使用的元),不可共享元(自身独自使用的元)

六、享元模式图解(以共享视频为例)

目前互联网上存在数不清的资源,如果每部资源在每个地方的展示都需要消耗资源的话,其存储压力是不可想象的。

但是,实际上——大部分的同一视频内容都指向一个资源地址,这就用到了享元模式,具体见下(部分网站引用同一个资源库,翻来覆去就那些资源,同质化严重)

设计模式——结构型模式三合一(组合、桥接、享元模式,图解分析,入门级设计模式解析)_第6张图片

结尾

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

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

你可能感兴趣的:(设计模式,享元模式,组合模式,java,设计模式,uml类图)