设计模式——享元模式

news/2024/11/29 20:52:50/

享元模式

定义

享元模式(Flyweight Pattern)是池技术的重要实现方式。

使用共享对象可以有效地支持大量的细粒度对象。

优缺点、应用场景

优点

可以大大减少应用程序创建对象的数量,降低程序内存占用。

缺点

提高了系统的复杂度,需要分离出享元对象的外部状态(key)和内部状态(对象属性),并且外部状态应该有可常量化的特性(如:String、int),否则导致系统的逻辑混乱

应用场景

  1. 大量相似的对象
  2. 享元对象应该具有相似的外部状态(对外标识的key的生成逻辑相同)
  3. 需要缓冲池的场景

代码模拟场景

从平家boy缓冲池中拣选一些boy进入地牢。。。

享元模式

UML图

在这里插入图片描述

抽象享元对象——PingjiaBoy

/*** 享元角色抽象 平家boy*/
public abstract class PingjiaBoy {/*** 提取对象池的KEY*/protected String key;/*** 名字*/private String name;/*** 职业*/private String job;/*** 权力*/private String power;public PingjiaBoy(String key) {this.key = key;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}public String getPower() {return power;}public void setPower(String power) {this.power = power;}
}

享元对象示例——PingjiaBoyPool

/*** 享元角色实例 平家boy候选池*/
public class PingjiaBoyPool extends PingjiaBoy {public PingjiaBoyPool(String key) {super(key);}public String getKey() {return key;}public void setKey(String key) {this.key = key;}
}

享元工厂——PingjiaBoyFactory

/*** 享元工厂 黑暗♂地牢*/
public class PingjiaBoyFactory {/*** 创建一个boy的预备候选池*/private final static Map<String, PingjiaBoy> BOY_POOL = new HashMap<>();/*** 根据key挑选平家boy惩罚** @param key key* @return 平家boy*/public static PingjiaBoy getPingjiaBoy(String key) {PingjiaBoy result;// 如果池中没有这个boy,则添加if (!BOY_POOL.containsKey(key)) {System.out.println(key + " Take it boy...");result = new PingjiaBoyPool(key);BOY_POOL.put(key, result);} else {// 存在则直接拣♂选出来result = BOY_POOL.get(key);System.out.println(key + " Come on...");}return result;}
}

入口类方法

private static void takeItBoy() {for (int i = 0; i < 3; i++) {String color = "肤色" + i;for (int j = 0; j < 10; j++) {String key = color + "样貌" + j;PingjiaBoyFactory.getPingjiaBoy(key);}}PingjiaBoy pingjiaBoy = PingjiaBoyFactory.getPingjiaBoy("肤色2样貌8");System.out.println(pingjiaBoy);
}

结果

在这里插入图片描述

参考书籍

秦小波《设计模式之禅》


http://www.ppmy.cn/news/906031.html

相关文章

不要脸的金山公司,又在弹天猫广告了20200317

系统托盘里有个购物车图标&#xff0c;查进程就查到这个&#xff0c;终止掉图标就没了。 每逢双十一之类的都有&#xff0c;现在没到时间都冒出来了&#xff0c;莫非快关门了&#xff1f; 金山WPS我还买了几年的超级会员呢&#xff0c;不希望就这么倒了。 曾经的国产软件标杆&…

今日有会员反映,金山毒霸对x3报毒

再次说明一下&#xff0c;FastVerCode.dll是验证码识别模块&#xff0c;不是病毒&#xff0c;请正常安装即可。 转载于:https://www.cnblogs.com/renzhe/archive/2013/04/21/3033905.html

计算机金山打字基础,计算机基础知识

《计算机基础知识》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《计算机基础知识(15页珍藏版)》请在人人文库网上搜索。 1、计算机基础知识,2013年9月25日,课程&#xff1a;计算机应用基础 13(5)班,计算机基础,目,录,计算机基础,计算机的演变,欣赏&#xff1a; 计算…

Word文档乱码恢复操作----免费指导

本人由于在整理电脑桌面的时候不小心将重要资料误删除&#xff0c;从而花费了半天时间才完美恢复&#xff0c;一开始从网上下载万兴数据恢复软件&#xff0c;等到最后要恢复文档时才发现是要收费的&#xff0c;对于我们这些没有任何收入的学生实在无力支持正版&#xff0c;所以…

金山词霸”屏幕取词技术揭密(讨论稿)

原文地址::http://blog.csdn.net/eagletian/article/details/1374056 相关文章 1、金山词霸”屏幕取词技术揭密(讨论稿) - yaodong - 博客堂----http://www.360doc.com/content/08/0618/21/7635_1348255.shtml 金山词霸”屏幕取词技术揭密(讨论稿) 这篇文章最早是发在北极星论…

一切为了高清——金山云魔镜平台助推5G高清应用

Photo by Thuanny Gantuss from Pexels 5G时代是超高清的时代&#xff0c;然而&#xff0c;冰冻三尺非一日之寒&#xff0c;在超高清视频直播点播等业务研发过程中&#xff0c;总会遇到很多令人抓狂的难题。本次LiveVideoStackCon 2020线上峰会我们邀请到了金山云高级技术总监蔡…

手机文档转html,手机金山文档怎么转换成Word文档电脑手机?

回答&#xff1a; 1、第袭一步&#xff1a;在WPS会员中心找到“金山PDF转Word”软件&#xff0c;并下载安装&#xff1b; 2、第二步&#xff1a;打开该软件&#xff0c;进入主界面。主界面左上方可点击添加想要转换的PDF文件&#xff0c;同时将PDF文件拖动到中部的方法也可以实…

WPS会员如何取消自动续费?微信/支付宝/WPS共3种方法

​​WPS 开启会员模式之后还是非常好用的&#xff0c;老古这些年就一直使用 WPS 会员来办公&#xff0c;不过有些用户不想花钱购买会员了就想取消 WPS 会员的自动续费功能&#xff0c;那么应该如何取消呢&#xff1f;今天老古就简单说一下微信、支付宝和 WPS 的 3 个方法&#…