美文网首页java设计模式笔记
设计模式十二--享元模式

设计模式十二--享元模式

作者: 朽木亦自雕 | 来源:发表于2019-03-07 22:48 被阅读13次

定义

使用共享变量可有效地支持大量的细粒度对象。享元模式是以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内部状态和外部状态。

享元模式的角色

1:抽象享元角色(Flyweight)
该角色对享元类进行抽象,需要外部状态的操作可以通过参数的形式将外部状态传入。

public interface Flyweight{
    public abstract void operations(String extrinsicState);
}

2:具体享元角色(ConcreteFlyweight)
该角色实现抽象享元定义的业务,注意享元对象的内部状态必须与环境无关,从而使得享元对象可以在内部系统共享。

public class ConcreteFlyweight implements Flyweight{
  private String intrinsicState;
  public  ConcreteFlyweight(String intrinsicState){
    this.intrinsicState= intrinsicState;
  }
  public void operations(String extrinsicState){
    System.out.println("内部状态:" +  intrinsicState + ", 外部状态:" + extrinsicState);
  }
}

3:享元工厂角色(FlyweightFactory)
该角色是就是构造一个池容器,负责创建和管理享元角色,并提供从池容器中获取对象的方法,保证享元对象可以被系统适当的共享。

public class FlyweightFactory{
  private static Map<String, Flyweight> pool = new HashMap<String, Flyweight>();
  public FlyweightFactory(){};
  public static Flyweight getFlyweight(String intrinsicState){
       Flyweight  flyweight = pool.get(intrinsicState);
       if(null == flyweight){
            flyweight = new ConcreteFlyweight(intrinsicState);
            pool.put(intrinsicState, flyweight);
       }
       return flyweight;
  }
}

4:客户端角色(Client)
该角色需要自行存储所有享元对象的外部形态。

public class Client{
  private static Flyweight flyweight;
  private static String  intrinsicState = "myIntrinsicState";
  public static void main(String [] args){
      flyweight = FlyweightFactory.getFlyweight(intrinsicState);
      flyweight.operations();
  }
}

优点

大幅度减少内存中对象的数量,降低程序中内存的占用,提高性能。

缺点

1:增加了系统的复杂性,使得程序的逻辑随之复杂。
2:享元模式将享元对象的状态外部化,而读取外部运行状态使得运行时间变长。

使用场景

1:系统中有大量相似对象。
2:需要缓冲池的场景。
3:细粒度的对象都具备较接近外部状态,而且内部状态与环境无关,即对象没有特定身份。

参考资料:设计模式(java)

相关文章

  • 好程序员Java培训​分享java设计模式之享元模式

    好程序员Java培训​分享java设计模式之享元模式,Java设计模式中的享元模式。享元模式有点类似于单例...

  • 设计模式(十二)享元模式

    享元模式定义 享元模式是结构型设计模式的一种,是池技术的重要实现方式,它可以减少应用程序创建的对象,降低程序内存的...

  • 设计模式十二--享元模式

    定义 使用共享变量可有效地支持大量的细粒度对象。享元模式是以共享的方式高效的支持大量的细粒度对象。享元模式能做到共...

  • 设计模式(十二):享元模式

    运用共享技术有效地支持大量细粒度的对象。在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有...

  • 设计模式(十二)享元模式

    1、概述 享元模式是一种结构型设计模式, 它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状...

  • Java设计模式——享元模式

    Java设计模式之享元模式 这期跟大家聊的的设计模式是享元模式,该模式也是结构模式。 简介 利用共享的方式解决大量...

  • Java设计模式_享元模式

    点击链接跳转:设计模式——享元模式

  • 二十一、享元模式

    1. 何为享元模式 定义:通过共享已存在的对象,减少创建对象内存开销的设计模式被称为享元模式。 享元模式和单例模式...

  • 享元模式

    swift实战-享元模式 概论:通过共享已存在的对象,减少创建对象内存开销的设计模式被称作享元模式 享元模式Fly...

  • 好程序员Java培训精讲  java设计模式—享元模式

    好程序员Java培训精讲 java设计模式—享元模式 一、关于享元模式 享元模式有点类似于单例模式,都是只生成一个...

网友评论

    本文标题:设计模式十二--享元模式

    本文链接:https://www.haomeiwen.com/subject/gdzqlqtx.html