2020-03-13

庚子鼠年 己卯月 乙卯日

描述

享元模式学习,代理模式

随笔

享元模式

​ 又称为 轻量级模式,它是一种对象结构型模式。:缓存共享对象,降低内存消耗

参考博客:https://baijiahao.baidu.com/s?id=1639843210271222415&wfr=spider&for=pc

​ 如果在一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用都创建新的对象。目的是提高系统性能。享元模式 是对象池的一种实现。类似于线程池,线程池可以避免不停的创建和销毁多个对象,消耗性能。享元模式 也是为了减少内存的使用,避免出现大量重复的创建销毁对象的场景。

从上面这个例子我们可以看到,这里其实有四个角色:

(1)享元工厂(Llibrary):用于创建具体享元类,维护相同的享元对象。当请求对象已经存在时,直接返回对象,不存在时,在创建对象。在例子中的解释就是图书馆,保存了所有的书,当学生借书时,有就拿走,没有买一本新书。这里面其实是使用了单例模式的。

(2)抽象享元(Book):定义需要共享的对象业务接口。享元类被创建出来总是为了实现某些特定的业务逻辑.

(3)具体享元(ConcreteBook):实现抽象享元类的接口,完成某一具体逻辑。在这里表示可以被借出。

在这里享元工厂是享元模式的核心,它需要确保系统可以共享相同的对象。它会维护一个对象列表,当我们想要获取享元类时,如果请求的享元类已经被创建,则直接返回已有的享元类:若没有,则创建一个新的享元对象,并将它加入到维护队列中。

第三步:享元工厂(Llibrary)-----参考博客

img

可以看出这个类是通过单例模式(饿汉试)创建的,通过map来记录创建的对象,判断这个对象有没有被创建或者被占用来决定是否创建新的对象。

享元模式与单例模式的区别

(1)享元设计模式是一个类有很多对象,而单例是一个类仅一个对象。

(2)享元模式是为了节约内存空间,提升程序性能,而单例模式则主要是出于共享状态的目的。

代理模式

比想的简单,参考博客:https://www.jianshu.com/p/9cdcf4e5c27d

java动态代理

https://www.cnblogs.com/jie-y/p/10732347.html

原文地址:https://www.cnblogs.com/chang1024/p/12489327.html