设计模式——享元模式

这篇具有很好参考价值的文章主要介绍了设计模式——享元模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

享元模式

定义

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

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

优缺点、应用场景

优点

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

缺点

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

应用场景

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

代码模拟场景

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

享元模式

UML图

设计模式——享元模式,设计模式,设计模式,享元模式,python

抽象享元对象——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);
}

结果

设计模式——享元模式,设计模式,设计模式,享元模式,python

参考书籍

秦小波《设计模式之禅》文章来源地址https://www.toymoban.com/news/detail-598154.html

到了这里,关于设计模式——享元模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • js设计模式:享元模式

    当需要处理很多非常类似操作的时候,可以创建可以共享的对象,并暴露接口供其他对象调用 这个对象内包含这些操作的处理逻辑,可以优化性能  

    2024年02月22日
    浏览(32)
  • 【23种设计模式】享元模式【⭐】

    个人主页 :金鳞踏雨 个人简介 :大家好,我是 金鳞 ,一个初出茅庐的Java小白 目前状况 :22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客 :这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进

    2024年02月09日
    浏览(35)
  • 设计模式-享元模式(Flyweight)

    享元模式(Flyweight Pattern)是一种结构型设计模式,它的主要目标是减少应用程序中对象的数量,以节省内存和提高性能。这一模式适用于对象数量庞大且相似的情况,通过共享内部状态来减少对象的创建。 在本篇博客中,我们将详细介绍享元模式的概念,并提供一个简单的

    2024年02月09日
    浏览(29)
  • 设计模式之享元模式

    本文看下一种结构型设计模式,享元模式。 当程序需要大量的重复对象,并且这些大量的重复对象只有部分属性不相同,其他都是相同的时候,就可以考虑使用享元设计模式设计模式来实现。典型的如围棋游戏中的棋子,除了颜色和位置不同外,其他都相同。射击游戏中的子

    2024年02月17日
    浏览(33)
  • Java设计模式-享元模式

    在Java领域的软件开发中,设计模式是提高代码可维护性和可扩展性的重要工具。其中,享元模式是一种被广泛使用的设计模式,它通过优化对象的重用来提升系统性能。 享元模式是一种结构型设计模式,旨在通过共享对象来减少系统中的对象数量,从而提升性能和减少内存

    2024年02月06日
    浏览(29)
  • 【前端设计模式】之享元模式

    享元模式是一种结构型设计模式,它通过共享对象来减少内存使用和提高性能。在前端开发中,享元模式可以用于优化大量相似对象的创建和管理,从而提高页面的加载速度和用户体验。 共享对象:享元模式通过共享相似对象来减少内存使用。相似对象可以共享一些不变的状

    2024年02月08日
    浏览(37)
  • 《设计模式的艺术》笔记 - 享元模式

            享元模式运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,是一种对象结构型模式。 myclass.

    2024年01月19日
    浏览(32)
  • Java 设计模式系列:享元模式

    享元模式(Flyweight Pattern)是一种软件设计模式,用于减少内存使用和提高性能。它通过共享细粒度对象来减少创建和销毁对象时所需的内存。享元模式适用于大量相似对象的场景,这些对象可以共享相同的状态和行为。 享元模式的核心思想是将对象分为内部状态和外部状态

    2024年04月15日
    浏览(37)
  • C#设计模式之---享元模式

    享元模式(Flyweight Pattern)是一种结构型模式,是运用共享技术有效的支持大量细粒度的对象。它使用共享对象,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似对象;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量对象。通常对象中的部分状态

    2024年02月16日
    浏览(25)
  • 设计模式之享元模式笔记

    记录下学习设计模式-享元模式的写法。JDK使用版本为1.8版本。 意图 :运用共享技术有效地支持大量细粒度的对象。 结构 : 其中: Flyweight描述一个接口,通过这个接口Flyweight可以接受并作用于外部状态。 ConcreteFlyweight实现Flyweight接口,并为内部状态(如果有)增加存储空间。C

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包