庚子鼠年 己卯月 乙卯日
描述
享元模式学习,代理模式
随笔
享元模式
又称为 轻量级模式,它是一种对象结构型模式。:缓存共享对象,降低内存消耗
参考博客:https://baijiahao.baidu.com/s?id=1639843210271222415&wfr=spider&for=pc
如果在一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用都创建新的对象。目的是提高系统性能。享元模式 是对象池的一种实现。类似于线程池,线程池可以避免不停的创建和销毁多个对象,消耗性能。享元模式 也是为了减少内存的使用,避免出现大量重复的创建销毁对象的场景。
从上面这个例子我们可以看到,这里其实有四个角色:
(1)享元工厂(Llibrary):用于创建具体享元类,维护相同的享元对象。当请求对象已经存在时,直接返回对象,不存在时,在创建对象。在例子中的解释就是图书馆,保存了所有的书,当学生借书时,有就拿走,没有买一本新书。这里面其实是使用了单例模式的。
(2)抽象享元(Book):定义需要共享的对象业务接口。享元类被创建出来总是为了实现某些特定的业务逻辑.
(3)具体享元(ConcreteBook):实现抽象享元类的接口,完成某一具体逻辑。在这里表示可以被借出。
在这里享元工厂是享元模式的核心,它需要确保系统可以共享相同的对象。它会维护一个对象列表,当我们想要获取享元类时,如果请求的享元类已经被创建,则直接返回已有的享元类:若没有,则创建一个新的享元对象,并将它加入到维护队列中。
第三步:享元工厂(Llibrary)-----参考博客
可以看出这个类是通过单例模式(饿汉试)创建的,通过map来记录创建的对象,判断这个对象有没有被创建或者被占用来决定是否创建新的对象。
享元模式与单例模式的区别
(1)享元设计模式是一个类有很多对象,而单例是一个类仅一个对象。
(2)享元模式是为了节约内存空间,提升程序性能,而单例模式则主要是出于共享状态的目的。
代理模式
比想的简单,参考博客:https://www.jianshu.com/p/9cdcf4e5c27d