设计模式之享元模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之享元模式相关的知识,希望对你有一定的参考价值。
1、享元模式的简介:
a、场景:
- 内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或者相似的对象,我们可以通过享元模式,节省内存。
b、核心:
- 享元模式以共享的方式高效地支持大量细粒度对象的重用。
- 享元对象做到共享的关键是区分了内部状态和外部状态。
c、享元模式的实现:
- FlyweightFactory 享元池一般设计成键值对。
- Flyweight 抽象享元类:
* 通常是一个接口或者抽象类,声明公共方法,这些方法可以向外界提供对象的内部状态,设置外部状态。
- ConcreteFlyWeight 具体享元类:
* 为内部状态提供成员变量进行存储。
- UnsharedConcreteFlyWeight 非共享享元类:
* 不能被共享的子类可以设计为非共享享元类
2、简单的代码演示:(可以想象自己要设计一个围棋软件,棋子的颜色、大小和形状都是不变的,但是它们的位置是变的,可以考虑使用享元模式。)
a、下面三张示图中,ClessFlyWeightFactory 类是享元池,ClessFlyWeight 接口是抽象享元类,ConcreteChess 类是具体享元类。
b、Client12 查看测试类中的测试结果,以及示例中的类图关系。(可以看到, ChessFlyWeightFactory 类和 ChessFlyWeight 接口是单向的聚合关系。)
3、享元模式的总结:
优点:
- 极大减少内存中的对象的数量
- 相同或者相似对象内存中只存了一份,极大的节约资源,提高系统性能
- 外部状态相对独立,不影响内部状态
缺点:
- 模式较复杂,是程序逻辑复杂化
- 为了节省内存,共享了内部状态,分离出外部状态,而读取外部状态是运行时间变长,用时间换取了空间。
本文出自 “12392717” 博客,请务必保留此出处http://12402717.blog.51cto.com/12392717/1929142
以上是关于设计模式之享元模式的主要内容,如果未能解决你的问题,请参考以下文章