美文网首页
享元模式

享元模式

作者: 打工养老板 | 来源:发表于2019-10-17 14:46 被阅读0次

享元(Flyweight)模式的定义:运用共享技术来有効地支持大量细粒度对象的复用。

享元模式的主要优点是:相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。

其主要缺点是:
为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。
读取享元模式的外部状态会使得运行时间稍微变长。

/**
* 抽象享元角色(Flyweight):是所有的具体享元类的基类,为具体享元规范需要实现的公共接口,非享元的外部状态以参数的形式通过方法传入。
* 具体享元(Concrete Flyweight)角色:实现抽象享元角色中所规定的接口。
* 非享元(Unsharable Flyweight)角色:是不可以共享的外部状态,它以参数的形式注入具体享元的相关方法中。
* 享元工厂(Flyweight Factory)角色:负责创建和管理享元角色。当客户对象请求一个享元对象时,享元工厂检査系统中是否存在符合要求的享元对象,如果存在则提供给客户;如果不存在的话,则创建一个新的享元对象。
**/
public class FlyweightPattern {
  public static void main(String[] args) {
    FlyweightFactory factory=new FlyweightFactory();
    Flyweight f01=factory.getFlyweight("a");
    Flyweight f02=factory.getFlyweight("a");
    Flyweight f03=factory.getFlyweight("a");
    Flyweight f11=factory.getFlyweight("b");
    Flyweight f12=factory.getFlyweight("b");       
    f01.operation(new UnsharedConcreteFlyweight("第1次调用a。"));       
    f02.operation(new UnsharedConcreteFlyweight("第2次调用a。"));       
    f03.operation(new UnsharedConcreteFlyweight("第3次调用a。"));       
    f11.operation(new UnsharedConcreteFlyweight("第1次调用b。"));       
    f12.operation(new UnsharedConcreteFlyweight("第2次调用b。"));
  }
}
/**
* 非享元角色
**/
class UnsharedConcreteFlyweight {
  private String info;
  public UnsharedConcreteFlyweight (String info) {
    this.info = info;
  }
  public String getInfo() {
    return this.info;
   }
  public void setInfo(String info) {
    this.info = info;
  }
}
/**
* 抽象享元角色
**/
interface Flyweight {
  public void operation(UnsharedConcreteFlyweight state);
}
/**
* 具体享元角色
**/
class ConcreteFlyweight implements Flyweight {
  private String key;
  ConcreteFlyweight(String key) {
    this.key = key;
    System.out.println("具体享元"+key+"被创建!");
  }
  public void operation(UnsharedConcreteFlyweight outState) {
    System.out.print("具体享元"+key+"被调用,");
    System.out.println("非享元信息是:"+outState.getInfo());
  }
}
/**
* 享元工厂角色
**/
class FlyweightFactory {
  private HashMap<String, Flyweight> flyweights = new HashMap<String, Flyweight>();
  public Flyweight getFlyweight(String key) {
    Flyweight flyweight = (Flyweight)flyweights.get(key);
    if (flyweight != null) {
      System.out.println("具体享元"+key+"已经存在,被成功获取!");
    } else {
      flyweight = new ConcreteFlyweight(key);
      flyweights.put(key, flyweight);
    }
    return flyweight;
  }
}

上一篇:外观模式
下一篇:组合模式
腾讯云双十一优惠链接

相关文章

  • 设计模式之享元模式(flyweight模式)

    引入享元模式 享元模式的实例 享元模式的分析 引入享元模式 flyweight是轻量级的意思,指的是拳击比赛中选手...

  • 第4章 结构型模式-享元模式

    一、享元模式的简介 二、享元模式的优缺点 三、享元模式的实例

  • 享元模式

    一、享元模式介绍 二、享元模式代码实例

  • 设计模式--享元模式

    目录 本文的结构如下: 引言 什么是享元模式 模式的结构 典型代码 代码示例 单纯享元模式和复合享元模式 模式扩展...

  • 享元模式C++

    享元模式,就是运用共享技术有效地支持大量细粒度的对象。 享元模式结构图 享元模式基本代码 应用场景 享元模式可以避...

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

    1 享元模式的定义 享元模式:使用共享对象可有效地支持大量细粒度的对象。享元模式是池技术的重要实现方式。享元模式的...

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

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

  • 结构型模式:享元模式

    文章首发:结构型模式:享元模式 七大结构型模式之六:享元模式。 简介 姓名 :享元模式 英文名 :Flyweigh...

  • Java设计模式(三)

    talk is cheap show me the code 享元模式 享元模式 责任链模式 责任链模式Filte...

  • 结构型-Flyweight

    享元模式原理与实现 享元模式(Flyweight Design Pattern) 所谓“享元”,顾名思义就是被共享...

网友评论

      本文标题:享元模式

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