2023-06-15  阅读(25)
原文作者: 求和的小熊猫 原文地址:https://blog.csdn.net/qq_38219153/article/details/110894623

享元模式

享元模式的定义:
使用共享对象可以有效的支持大量的明细粒度的对象

享元模式是以共享的方式高效的支持大量的细粒度的对象,而享元模式能做到共享的关键是区分内部状态和外部状态。

  • 内部状态:内部状态是存储在享元对象内部的,可以共享的信息,并且这些信息不会随着环境的改变而改变
  • 外部状态:外部状态是对象得以依赖的标记,外部状态是随环境改变而改变且不可以共享的状态

享元模式的参与角色

  • Flyweight 抽象享元角色:该角色对享元类进行抽象,同时定义对象的外部状态和内部状态的接口或实现
  • ConcreteFlyweight 具体享元角色:该角色实现抽象享元定义定义业务,同时享元对象的内部状态必须与环境无关,从而使得享元对象可以在系统内共享。
  • FlyweightFactory 享元工厂:该角色构造一个池容器负责创建和管理享元角色,并提供从池中获得对象的方法
享元模式的简单示例

202306152220311221.png

抽象享元角色

    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] ,回复【面试题】 即可免费领取。

阅读全文