享元模式
享元模式的定义:
使用共享对象可以有效的支持大量的明细粒度的对象
享元模式是以共享的方式高效的支持大量的细粒度的对象,而享元模式能做到共享的关键是区分内部状态和外部状态。
- 内部状态:内部状态是存储在享元对象内部的,可以共享的信息,并且这些信息不会随着环境的改变而改变
- 外部状态:外部状态是对象得以依赖的标记,外部状态是随环境改变而改变且不可以共享的状态
享元模式的参与角色
- Flyweight 抽象享元角色:该角色对享元类进行抽象,同时定义对象的外部状态和内部状态的接口或实现
- ConcreteFlyweight 具体享元角色:该角色实现抽象享元定义定义业务,同时享元对象的内部状态必须与环境无关,从而使得享元对象可以在系统内共享。
- FlyweightFactory 享元工厂:该角色构造一个池容器负责创建和管理享元角色,并提供从池中获得对象的方法
享元模式的简单示例
抽象享元角色
public abstract class Flyweight {
private String innerState;
protected final String extrernalState;
public Flyweight(String externalState) {
this.extrernalState = externalState;
}
public abstract void operation();
public String getInnerState() {
return this.getInnerState();
}
public void setInnerState(String innerState) {
this.innerState = innerState;
}
}
具体享元角色
public class ConcreteFlyweight extends Flyweight{
public ConcreteFlyweight(String externalState) {
super(externalState);
// TODO Auto-generated constructor stub
}
@Override
public void operation() {
// TODO Auto-generated method stub
}
}
享元工厂
public class FlyweightFactory {
private static HashMap<String,Flyweight> pool = new HashMap();
public static Flyweight getFlyweight(String external) {
Flyweight fly = null;
if(pool.containsKey(external)) {
fly = pool.get(external);
}else {
fly = new ConcreteFlyweight(external);
pool.putIfAbsent(external, fly);
}
return fly;
}
}
享元模式的优缺点和使用场景
享元模式的优点:
- 减少应用程序创建的对象
- 降低程序的内存占用
- 增强了程序性能
享元模式的使用场景
- 系统中存在大量的相似对象
- 细粒度的对象都具备接近的
- 需要缓冲池的场景
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。