设计模式学习(十一) 享元模式
2015-04-19 20:56
316 查看
场景:
-- 内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的对象,我们可以通过享元模式,节省内存。核心:
-- 享元模式以共享的方式高效地支持大量细粒度对象的重用。-- 享元对象能做到共享的关键是区分了内部状态和外部状态。
内部状态:可以共享,不会随环境变化而改变
外部状态:不可以共享,会随环境变化而改变
享元模式实现:
-- FlyweightFactory享元工厂类创建并管理享元对象,享元池一般设计成键值对
-- FlyWeight抽象享元类
通常是一个接口或抽象类,声明公共方法,这些方法可以向外界提供对象的内部状态,设置外部状态
-- ConcreteFlyWeight具体享元类
为内部状态提供成员变量进行存储
-- UnsharedConcreteFlyWeight
不能被共享的子类可以设计为非共享享元类
代码实现:
package com.lp.flyweight; public class Client { public static void main(String[] args){ ChessFlyWeight chess1 = ChessFlyWeightFactory.getChess("黑色"); ChessFlyWeight chess2 = ChessFlyWeightFactory.getChess("白色"); ChessFlyWeight chess3 = ChessFlyWeightFactory.getChess("黑色"); chess1.setColor("红"); chess1.display(new Coordinate(10, 20)); System.out.println(chess1); chess2.display(new Coordinate(11, 20)); System.out.println(chess2); System.out.println(chess3.getColer()); } }
客户端
优点:
-- 极大减少内存中对象的数量-- 相同或相似对象内存中之存一份,极大的节约资源,提高系统性能
-- 外部状态相对独立,不影响内部状态
缺点:
-- 模式较复杂,是程序逻辑复杂化-- 为了节省内存,共享了内部状态,分离出外部状态,而读取外部状态使运行时间变长,用时间换取了空间
相关文章推荐
- Java设计模式学习记录-享元模式
- 设计模式学习笔记---享元模式FlyWeight pattern(Java版)
- 设计模式学习笔记(十二)——Flyweight享元模式
- 设计模式学习笔记十一:适配器模式(Adapter Pattern)
- 【设计模式学习笔记十二】【结构型模式】【享元模式(FlyWeight)】
- C#设计模式之十一享元模式(Flyweight Pattern)【结构型】
- 设计模式学习笔记(十二)——Flyweight享元模式
- 步步为营 .NET 设计模式学习笔记 十七、Flyweight(享元模式)
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- 设计模式学习笔记--享元模式
- 设计模式学习笔记(十一)—Prototype原型模式
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- java/android 设计模式学习笔记(13)---享元模式
- 设计模式深入学习--Flyweight 享元模式(结构型模式)
- 设计模式学习笔记(十一:抽象工厂模式)
- 设计模式学习笔记(十一)——Facade外观
- 设计模式学习笔记(十一)——Facade外观模式
- 设计模式学习系列十:享元模式(Flyweight Pattern)
- 跟屌丝大哥学习设计模式--享元模式
- 设计模式学习--享元模式