当前位置: 首页 > news >正文

苏州网站建设点一点百度爱采购怎样入驻

苏州网站建设点一点,百度爱采购怎样入驻,紧抓政府网站集约化建设,综合性型门户网站有哪些目录 一、 啥是享元模式?二、 为什么要用享元模式?三、 享元模式的实现方式四、 享元模式的优缺点五、 享元模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支…

在这里插入图片描述

目录

    • 一、 啥是享元模式?
    • 二、 为什么要用享元模式?
    • 三、 享元模式的实现方式
    • 四、 享元模式的优缺点
    • 五、 享元模式的应用场景
    • 六、 总结

🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
🌟了解组合模式请看: (十 一)趣学设计模式 之 组合模式!
✨更多请看个人主页: 码熔burning

这篇文章带你详细认识一下设计模式中的享元模式

一、 啥是享元模式?

想象一下,你正在玩一个大型的在线游戏 🎮。 游戏中有成千上万的士兵 💂,每个士兵都有自己的位置、生命值、装备等等。 如果为每个士兵都创建一个完整的对象,会消耗大量的内存 🧠。 但是,很多士兵的外观、属性都是相同的,只有位置不同。

享元模式,就是运用共享技术有效地支持大量细粒度的对象! 享元模式通过共享尽可能多的对象来最小化内存使用 💾。

简单来说,就是把对象的状态分成内部状态和外部状态,共享内部状态,减少对象数量! ♻️

  • 你的程序需要创建大量的相似对象: 就像游戏中的士兵 🎮💂!
  • 对象的很多状态都可以共享: 就像士兵的外观、属性 🎮!
  • 你想减少内存消耗: 就像你想让游戏运行更流畅 🧠!

二、 为什么要用享元模式?

用享元模式,好处多多 👍:

  • 减少内存消耗: 通过共享对象,减少内存占用 💾!
  • 提高性能: 减少对象创建和销毁的开销 🚀!
  • 提高系统扩展性: 可以支持更多的对象 ➕!

三、 享元模式的实现方式

享元模式主要包含以下几个角色:

  • Flyweight(享元): 定义享元对象的接口,声明可以被共享的内部状态,并提供接受外部状态的方法。 🎮💂 (比如:士兵的基类)
  • ConcreteFlyweight(具体享元): 实现享元接口,存储内部状态。 🎮💂 (比如:具体的士兵对象)
  • UnsharedConcreteFlyweight(非共享具体享元): 不是共享的享元对象,通常包含一些不能被共享的状态。 (比如:拥有特殊装备的士兵)
  • FlyweightFactory(享元工厂): 创建和管理享元对象,确保享元对象可以被共享。 🏭 (比如:士兵工厂)
  • Client(客户端): 使用享元对象,并提供外部状态。 🎮 (比如:游戏客户端)

内部状态: 指的是对象可以共享的状态,存储在享元对象内部,不会随着环境改变而改变。 (比如:士兵的外观、属性)
外部状态: 指的是对象不能共享的状态,需要由客户端提供,会随着环境改变而改变。 (比如:士兵的位置、生命值)

代码示例:

import java.util.HashMap;
import java.util.Map;// 享元:士兵接口
public interface Soldier {void display(int x, int y); // 显示士兵
}// 具体享元:士兵
public class ConcreteSoldier implements Soldier {private String model; // 士兵模型public ConcreteSoldier(String model) {this.model = model;}@Overridepublic void display(int x, int y) {System.out.println("士兵模型:" + model + ",位置:(" + x + ", " + y + ")");}
}// 享元工厂:士兵工厂
public class SoldierFactory {private static Map<String, Soldier> soldierMap = new HashMap<>(); // 存储士兵对象public static Soldier getSoldier(String model) {Soldier soldier = soldierMap.get(model);if (soldier == null) {soldier = new ConcreteSoldier(model);soldierMap.put(model, soldier);}return soldier;}
}// 客户端
public class Client {public static void main(String[] args) {Soldier soldier1 = SoldierFactory.getSoldier("步兵"); // 获取步兵soldier1.display(10, 20); // 显示步兵Soldier soldier2 = SoldierFactory.getSoldier("步兵"); // 获取步兵soldier2.display(30, 40); // 显示步兵Soldier soldier3 = SoldierFactory.getSoldier("骑兵"); // 获取骑兵soldier3.display(50, 60); // 显示骑兵System.out.println("士兵数量:" + SoldierFactory.soldierMap.size()); // 输出士兵数量}
}

分析:

  • Soldier 是享元接口,定义了士兵的显示方法。
  • ConcreteSoldier 是具体享元,实现了士兵接口,存储了士兵的模型。
  • SoldierFactory 是享元工厂,创建和管理士兵对象,确保相同模型的士兵对象只创建一个。

输出结果:

士兵模型:步兵,位置:(10, 20)
士兵模型:步兵,位置:(30, 40)
士兵模型:骑兵,位置:(50, 60)
士兵数量:2

可以看到,虽然创建了三个士兵对象,但是实际只创建了两个士兵对象,因为步兵对象被共享了。

四、 享元模式的优缺点

优点:

  • 减少内存消耗 💾!
  • 提高性能 🚀!
  • 提高系统扩展性 ➕!

缺点:

  • 增加了系统的复杂度 😫!
  • 需要分离内部状态和外部状态,设计难度较高 🧠!
  • 共享对象的状态不可修改,否则会影响其他使用该对象的客户端 🔒!

五、 享元模式的应用场景

  • 当你的程序需要创建大量的相似对象时: 就像游戏中的士兵 🎮💂!
  • 对象的很多状态都可以共享: 就像士兵的外观、属性 🎮!
  • 你想减少内存消耗: 就像你想让游戏运行更流畅 🧠!
  • 文本编辑器: 文本编辑器可以使用享元模式来共享字符对象,减少内存消耗。
  • 数据库连接池: 数据库连接池可以使用享元模式来共享数据库连接对象,提高性能。

六、 总结

  • 享元模式就像把对象的状态分成内部状态和外部状态,共享内部状态,减少对象数量! ♻️
  • 主要包含享元、具体享元、非共享具体享元和享元工厂四个角色! 🎭
  • 优点是减少内存消耗、提高性能、提高系统扩展性! 👍
  • 缺点是增加复杂度、设计难度较高、共享对象的状态不可修改! 👎
  • 适用于需要创建大量的相似对象,且对象的很多状态都可以共享的场景! 🎯

希望这篇文章能让你彻底理解享元模式! 💯 祝你学习愉快! 😄
看完请看:(十 三)趣学设计模式 之 模版方法模式!

http://www.ds6.com.cn/news/6800.html

相关文章:

  • 液压产品做哪个网站好怎么做网络宣传推广
  • 江西网站建设开发网站排名优化课程
  • 一个网站如何做双语河南网站seo靠谱
  • 网站生成海报功能怎么做的搜索引擎排名营销
  • 平安区wap网站建设公司seo推广是什么意思
  • 网站返回404百度竞价排名规则及费用
  • 常用网页设计软件宁波正规seo推广公司
  • 哪个行业最需要做网站北京已感染上千万人
  • 在国外做h网站怎么样外贸国际网站推广
  • 做网站推广需要什么今日国际新闻最新消息事件
  • 做软件常用的网站有哪些软件有哪些云搜索引擎
  • 网站建设什么打王思聪沈阳头条今日头条新闻最新消息
  • 电子商城网站制作数据库网页设计图
  • 网站备案期间做什么百度seo搜索引擎优化
  • 空间站对接热门关键词排名查询
  • 武汉站建设哈尔滨百度网站快速优化
  • 网站模版库外贸独立站建站
  • 龙岩有什么兼职可以做深圳优化公司高粱seo较
  • 外贸网站做SEO河北seo技术培训
  • 西安企业网站建设托管搜索词和关键词
  • 三站一体网站制作百度广告推广费用
  • 网页小游戏列表游戏优化
  • 怎么利用爬虫技术 提高网站排名app推广好做吗
  • 百度大全网站怎么策划一个营销方案
  • 做网站一定要域名吗大数据营销推广精准粉
  • 广州东莞最新疫情郑州seo服务
  • ps做网站像素大小营销网站都有哪些
  • wordpress主题添加中文版关键词优化包含
  • 哪个网站可以查企业信息万网注册域名查询官方网站
  • 网站数据库建表百度热度