设计模式-享元模式
来源:互联网 发布:金山数据恢复好用吗 编辑:程序博客网 时间:2024/06/02 19:18
1.享元模式的定义及使用场景
享元模式是对象池的一种实现。享元模式用来尽可能减少内存的使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享、避免创建过多对象的效果,这样一来就可以提升性能、避免内存移除等。
享元对象中的部分状态是可以共享,可以共享的状态分为内部状态,内部状态不会随着环境变化;不可共享的状态则称为外部状态,他们会随着环境的改变而改变。在享元模式中会建议一个对象容器,在经典的享元模式中该容器为一个Map,它的键是享元对象的内部状态,它的值就是享元对象本身。客户端程序通过这个内部状态从享元模式工厂中获取享元对象,如果有缓存则使用缓存对象,否则创建一个享元对象并且存入容器中,这样一来就避免了创建过多对象的问题。
定义:
享元模式是池技术的重要实现方式,使用共享对象可有效地支持大量的细粒度的对象
使用场景:
- 系统中存在大量的相似对象
- 细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特点身份
- 需要缓冲池的场景
2. 享元模式的优缺点
2.1优点
享元模式是一个非常简单的模式,它可以大大减少应用程序创建的对象,降低程序内存的占用,增强程序的性能。
2.2缺点
提高了系统的复杂性,需要分离出外部状态和内部状态,而且内部状态具有固化特性,不应随外部状态改变而改变
3. 享元模式的实现方式
public interface Flyweight { //一个示意性方法,参数state是外蕴状态 public void operation(String state);}
public class ConcreteFlyweight implements Flyweight { private Character intrinsicState = null; /** * 构造函数,内蕴状态作为参数传入 * @param state */ public ConcreteFlyweight(Character state){ this.intrinsicState = state; }
/** * 外蕴状态作为参数传入方法中,改变方法的行为, * 但是并不改变对象的内蕴状态。 */ @Override public void operation(String state) { // TODO Auto-generated method stub System.out.println("Intrinsic State = " + this.intrinsicState); System.out.println("Extrinsic State = " + state); }}
public class FlyweightFactory { private Map<Character,Flyweight> files = new HashMap<Character,Flyweight>(); public Flyweight factory(Character state){ //先从缓存中查找对象 Flyweight fly = files.get(state); if(fly == null){ //如果对象不存在则创建一个新的Flyweight对象 fly = new ConcreteFlyweight(state); //把这个新的Flyweight对象添加到缓存中 files.put(state, fly); } return fly; }}
public class Client { public static void main(String[] args) { // TODO Auto-generated method stub FlyweightFactory factory = new FlyweightFactory(); Flyweight fly = factory.factory(new Character('a')); fly.operation("First Call"); fly = factory.factory(new Character('b')); fly.operation("Second Call"); fly = factory.factory(new Character('a')); fly.operation("Third Call"); }}
1 0
- 设计模式---享元模式
- 设计模式 享元模式
- 设计模式 - 享元模式
- 设计模式:享元模式
- 设计模式 - 享元模式
- 设计模式-享元模式
- 设计模式---------享元模式
- 设计模式:享元模式
- 设计模式--享元模式
- 设计模式-享元模式
- 设计模式:享元模式
- 设计模式-享元模式
- 设计模式--享元模式
- 设计模式--享元模式
- 设计模式--享元模式
- 设计模式-享元模式
- 设计模式-享元模式
- 【设计模式】享元模式
- 隐藏scrollbar的CSS
- 在OpenLava中管理并行作业
- SpringMVC01-框架原理与搭建
- ajax中async同步和异步的区别和使用技巧
- mongodb的安装与配置
- 设计模式-享元模式
- Java并发编程- 内存模型详解
- 单点登录SSO
- linux 查询某个应用的进程都有哪些
- 史上最简单的 MyBatis 教程(五)
- AngularJS实际项目应用——单元测试框架设计
- Linux--信号时序竞态
- C++教程网之Linux网络编程视频 Unix网络编程视频
- T349光的原理-DWDM中如何锁定波长