设计模式精炼(三): 结构型01

举报
且听风吟 发表于 2019/10/28 20:01:36 2019/10/28
【摘要】 本文将介绍设计模型之结构型01。

外观模式(Facade)

外观模式主要是将客户端直接与多个模块打交道的方式改为客户端与门面打交道,然后门面再去与各个模块打交道。客户可以不知道各个模块的具体实现甚至可以不用知道模块是否存在。
例:

image.png

|- Facade模式还可以用在子系统的某些功能不需要暴露给其他子系统的情况,如下:
例:

image.png

享元模式

以共享的方式高效地支持大量的细粒度对象,目的是减少多次利用的对象重复创建对内存造成较大的开销。
|- 英文是flyweight,轻量级的。但是根据设计模式中的概念,将此译为享元,意思是共享元数据,相当于共享对象。
|- Java中String类型就是使用了享元模式,String对象是final类型的,Java中的字符串常量都是存在常量池中的。
例:

image.png

结果为:true

单纯向元模式:共享对象

共享对象
例:

image.png

结果如下:
    21685669
    instrinsicState :a
    extrinsicState :first
    19997786
    instrinsicState :b
    extrinsicState :second
    21685669
    instrinsicState :a
    extrinsicState :third
由此可见,第一次和第三次对象的hashCode一样,说明在内存地址中是同一个对象。

复杂享元模式

    将一些单纯享元使用合成模式加以复合,形成复合享元对象。这样的复合享元对象本身不能共享,但是它们可以分解成单纯享元对象,而后者则可以共享。
例:

image.png

运行结果:
    a: 21685669
    instrinsicState :a
    extrinsicState :composite -->
    b: 19997786
    instrinsicState :b
    extrinsicState :composite -->
    c: 24079912
    instrinsicState :c
    extrinsicState :composite -->
    +++++++++++++++
    复合享元是不可以共享:false
    23050916,32379559
    单纯享元是可以共享的:true
    fly1: 21685669,state: a
    fly2: 21685669,state: a
    fly3: 19997786,state: b

代理模式

给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,类似于中介,客户与客户之间无法直接进行交流,需要使用一个媒介。
例:

image.png

本文转载自微信公众号【java学习之道】。

原文链接:https://mp.weixin.qq.com/s?__biz=MzU4NzYwNDAwMg==&mid=2247484031&idx=1&sn=3c37418e50d18a9159459655af24640e&chksm=fde8cb32ca9f422413a57f2d30dbe1149ae6ef1d4a571d28f3c29380a947c864583873e75f06&scene=0#rd

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。