前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 设计模式系列(14) —— 享元模式

Java 设计模式系列(14) —— 享元模式

作者头像
求和小熊猫
发布2021-01-18 10:19:37
2590
发布2021-01-18 10:19:37
举报

享元模式

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

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

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

享元模式的参与角色

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

抽象享元角色

代码语言:javascript
复制
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;
    }
}

具体享元角色

代码语言:javascript
复制
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
        
    }
}

享元工厂

代码语言:javascript
复制
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;
    }
}
享元模式的优缺点和使用场景

享元模式的优点:

  • 减少应用程序创建的对象
  • 降低程序的内存占用
  • 增强了程序性能

享元模式的使用场景

  • 系统中存在大量的相似对象
  • 细粒度的对象都具备接近的
  • 需要缓冲池的场景
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-01-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 享元模式
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档