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

网友投稿 581 2022-05-29

外观模式(Facade)

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

例:

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

例:

享元模式

以共享的方式高效地支持大量的细粒度对象,目的是减少多次利用的对象重复创建对内存造成较大的开销。

|- 英文是flyweight,轻量级的。但是根据设计模式中的概念,将此译为享元,意思是共享元数据,相当于共享对象。

|- Java中String类型就是使用了享元模式,String对象是final类型的,Java中的字符串常量都是存在常量池中的。

例:

结果为:true

单纯向元模式:共享对象

共享对象

例:

结果如下:

21685669

instrinsicState :a

extrinsicState :first

19997786

instrinsicState :b

extrinsicState :second

21685669

instrinsicState :a

extrinsicState :third

由此可见,第一次和第三次对象的hashCode一样,说明在内存地址中是同一个对象。

复杂享元模式

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

例:

运行结果:

a: 21685669

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

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

代理模式

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

例:

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:共享上级出现相同节点数量累加的问题如何调整?
下一篇:高可用之SkybilityHA简单介绍
相关文章