首页 > 其他分享 >享元模式-13

享元模式-13

时间:2023-06-30 23:22:18浏览次数:39  
标签:享元 13 String fw SubFlyweight2 模式 External Flyweight public

概述

享元模式 (Flyweight Pattern) 又称轻量级模式。它使用共享技术有效支持大量细粒度对象的复用。

优点:大量减少内存中对象数量,相同/相似对象在内存中仅保留一份。
缺点:增加系统的复杂性。

class External {
  String external;
  
  External(String e) {
    external = e;
  }
  
  public String get() {
    return external;
  }
}

interface Flyweight {
  void op(External e);
}

class SubFlyweight1 implements Flyweight {
  String innerState;
  
  public SubFlyweight1(String inner) {
    innerState = inner;
  }
  
  public void op(External e) {
    // other
    e.get();
   // other
  }
}

class SubFlyweight2 implements Flyweight {
  String innerState;
  
  public SubFlyweight2(String inner) {
    innerState = inner;
  }
  
  public void op(External e) {
    // other
    e.get();
   // other
  }
}

class FlyweightFactory {
  ArrayList<Flyweight> fw = new ArrayList<>();
  
  public FlyweightFactory() {
    Flyweight sub1 = new SubFlyweight1("sub1");
    fw.add(sub1);
    Flyweight sub2 = new SubFlyweight2("sub2");
    fw.add(sub2);
  }
  
  public Flyweight getFlyweight(String type) {
    if (type == "SubFlyweight1") {
      return (SubFlyweight1)fw.get(0);
    } else if (type == "SubFlyweight2") {
      return (SubFlyweight2)fw.get(1);
    } else {
      return null;
    }
  }
}

图示:
image

参考

[1]. 刘伟, 设计模式. 2011.

标签:享元,13,String,fw,SubFlyweight2,模式,External,Flyweight,public
From: https://www.cnblogs.com/xdreamc/p/16462734.html

相关文章

  • SQLSERVER数据库三种恢复模式
    SQLServer数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式。  sqlserver数据库提供了三种恢复模式:完整,简单和大容量日志,这些模式决定了sqlserver如何使用事务日志,如何选择它要记录的操作,以及是否截断日志。截断事务日志是删除己执行事务并把该日志空间让......
  • 闲话 Day13.5
    稍微沾点学术而且闲话不多。难得一见的,我也开始打专题了啊。放在之前大概是完全不做/找几个水题打完跑路的。可能是感觉DP/字符串这边确实啥都不会吧。能够放到专题里面的题大抵质量还是不错的。所以打一打没啥坏处。相对来说,可能打专题比打模拟赛的用处大一点(?)然而,不可否......
  • Docker网络管理_四种网络模式
    Docker网络管理_四种网络模式Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关四类网络模式Docker网络模式配置说明host模式-–net=host......
  • 光脚丫学LINQ(013):LINQ查询语法与方法语法
    视频演示:http://u.115.com/file/f2f1e1a2f4 通过使用C#3.0中引入的声明性查询语法,介绍性LINQ文档中的多数查询都被编写为查询表达式。但是,.NET公共语言运行时(CLR)本身并不具有查询语法的概念。因此,在编译时,查询表达式会转换为CLR确实了解的内容:方法调用。这些方法称为......
  • React - 13 Hooks组件之useEffect
    1.useEffectimportReact,{useState,useEffect}from"react";import{Button}from'antd';import'./Demo.less';/*useEffect:在函数组件中,使用生命周期函数useEffect(callback):没设置依赖+第一次渲染完毕后,执行callback,等价于componentDidMount......
  • 深入浅出设计模式 - 桥接模式
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌Java知识图谱点击链接:体系化学习Java(Java面试专题)......
  • 深入浅出 - 单例模式
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌Java知识图谱点击链接:体系化学习Java(Java面试专题)......
  • 深入浅出设计模式 - 状态模式
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌Java知识图谱点击链接:体系化学习Java(Java面试专题)......
  • 深入浅出设计模式 - 责任链模式
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌Java知识图谱点击链接:体系化学习Java(Java面试专题)......
  • 深入浅出设计模式 - 中介者模式
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌Java知识图谱点击链接:体系化学习Java(Java面试专题)......