设计模式课程 设计模式精讲 13-1 享元模式讲解

1    课程讲解

1.1  类型:

1.2  定义:

1.3  应用场景:

1.4  优点:

1.5  缺点:

1.6  扩展:

1.7  和其他设计模式比较:

1    课程讲解
1.1  类型:

结构型:

1.2  定义:

◆定义:提供了减少对象数量从而改善应用所需的对象结构的方式
◆运用共享技术有效地支持大量细粒度的对象

(可能对于内存溢出类型的问题解决有效)(池子)

1.3  应用场景:

◆ a  常常应用于系统底层的开发,以便解决系统的性能问题。

系统中如果有大量的对象,可能会造成内存溢出,我们可以把共同的部分抽象出来,有相同的业务请求,则返回在内存中的已有对象,避免重新创建。


◆   b  系统有大量相似对象、需要缓冲池的场景。

(某个对象的复用度越高,越倾向于使用享元模式)

1.4  优点:

◆减少对象的创建,降低内存中对象的数量,降低系统的内存,提高效率
◆减少内存之外的其他资源占用

(a  new对象需要时间,当我们直接从池子中取对象的时候,对象不用创建,节省了时间,特别是当对象并发或者使用率比较高的时候,提高了效率

   b  文件句柄和窗口句柄是有一定的限制的,当同一对象被特别多的时候,往往可能导致句柄达到极限而导致崩溃)

1.5  缺点:

◆关注内/外部状态、关注线程安全问题

我们使用共享模式的时候,大都是使用hashMap,不会用HashTable(用hashTable会由于同步锁造成效率过低(特别是应用在报考系统3天内登录多少人,某一天微博大事件情况))


◆使系统、程序的逻辑复杂化

外部状态不应该随着内部状态的变化而变化

1.6  扩展:

内部状态:

在享元模式内部并且不会随着环境改变而改变的共享部分;无论外部环境如何变化,我都不变,并且该状态在享元模式内部。

外部状态:

随着环境改变而改变的就是外部状态,这种状态记录在享元模式的外部。

1.7  和其他设计模式比较:

享元模式和代理模式:

代理模式是代理一个类,如果生成这个代理类花的资源和时间比较多,可以使用享元模式处理这个类的速度。

享元模式和单例模式:

容器单例是两种方式的一种结合。享元模式是一种复用对象的思想

原文地址:https://www.cnblogs.com/1446358788-qq/p/11518765.html