GOF23设计模式之享元模式之理解
来源:互联网 发布:软件缺陷分析方法 编辑:程序博客网 时间:2024/06/05 00:14
享元模式(FlyWeight)
内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的对象,我们可以通过享元模式,节省内存。
节省了内存,有些时候,会造成运行时间的加长。
核心:
享元模式以共享的方式高效地支持大量细粒度对象的重用
享元对象能做到共享的关键是区分了内部状态和外部状态。
内部状态:可以共享,不会随环境变化而改变。
外部状态:不可以共享,会随环境变化而改变。
围棋软甲设计:
每个围棋棋子都是一个对象:
有如下对象:
颜色
形状 这些事可以共享的,称之为内部状态
大小
位置: 这些不可以共享称之为外部状态。
我们可以看到,在一局棋中,可以有几十或者几百个黑白棋子,但是我们考察这些棋子对象,会发现,所有的黑色棋子或者白色的棋子,他们的颜色,形状,大小都是一样的。这些一样的属性,在享元模式中我们称之为内部状态
而每个棋子的位置都是不一样的,这类属性称之为外部状态
享元模式实现:
FlyweightFactory享元工厂类:创建并管理享元对象(也就是享元模式通常要和工厂模式搭配起来),享元池一般设置为键值对
FlyWeight抽象享元类通常是一个接口或者抽象类,声明公共方法,这些方法可以向外界提供对象的内部状态,设置外部状态。
ConcreteFlyWeight具体享元类为内部状态提供成员变量进行存储(如棋子的颜色,形状,大小)
UnsharedConcreteFlyWeight非共享享元类不能被共享的子类可以设计为非共享享元类。(如棋子的位置)
应用场景:
享元模式由于其共享的特性,可以在任何池中操作,比如,线程池,数据库连接池。
String类的设计也是享元模式。(共享常量池中的对象)
优点:
极大减少了内存中对象的数量
相同或相似对象内存只存一份,极大地节约资源,提高系统性能
外部状态相对独立,不影响内部状态
缺点:
模式较为复杂,使得程序逻辑复杂化
为了节省内存,共享了内部状态,分离出外部状态,而读取外部状态使运行时间变长。用时间换取了空间。
0 0
- GOF23设计模式之享元模式之理解
- GOF23设计模式之享元模式的实现
- GoF23种设计模式之结构型模式之享元模式
- GOF23设计模式之动态代理模式之理解
- GOF23设计模式之装饰模式之理解
- GOF23设计模式之观察者模式之理解
- GOF23之工厂模式理解
- 设计模式GOF23之单例模式理解
- GOF23设计模式之桥接模式理解
- GOF23设计模式之组合模式的理解
- GOF23设计模式之迭代器模式理解与实现
- GOF23设计模式之中介者模式的理解
- GOF23设计模式之状态模式的理解与实现
- GOF23设计模式之 单例模式
- GOF23设计模式之 工厂模式
- GOF23设计模式之 建造者模式
- GOF23 设计模式之 适配器模式
- GOF23 设计模式之 代理模式
- 实例详解CSS中position的fixed属性使用
- linux kernel makefile整体分析
- 阴影映射(Shadow Map)的研究(二)
- linux的审计功能(audit)
- 黑马程序员——Java之IO流(二)
- GOF23设计模式之享元模式之理解
- java基础8:GUI
- linux 定时任务
- mvc UIViewController 设备旋转
- 【Python与R】Rpy2 - 安装
- hdoj-1286-找新朋友
- 推荐系统之协同过滤概述
- STM32 RTC卡死在RTC_WaitForLastTask()解决方法
- 历届试题 小朋友排队(树状数组求逆序数)