设计模式学习笔记(十二)享元模式及其应用

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
享元(Flyweight)模式:顾名思义就是被共享的单元。意图是复用对象,节省内存,提升系统的访问效率。比如在红白机冒险岛游戏中的背景花、草、树木等对象,实际上是可以多次被不同场景所复用共享,也是为什么以前的游戏占用那么小的内存,却让我们感觉地图很大的原因。

冒险岛中的背景

一、享元模式介绍

1.1 享元模式的定义

享元模式的定义是:运用共享技术来有效地支持大量细粒度对象的复用。

这里就提到了两个要求:细粒度和共享对象。而正是因为要求细粒度,那么势必会造成对象数量过多而且对象性质相近。所以我们可以将对象分为:内部状态和外部状态,内部状态指对象共享出来的信息,存储在享元信息内部,不会随着环境改变;外部状态指对象得以依赖的标记,会随着环境改变,不可以共享。根据是否共享,可以分成两种模式:

  • 单纯享元模式:该模式中所有具体享元类都是可以共享,不存在非共享具体享元类
  • 复合享元模式:将单纯享元对象使用组合模式加以组合,可以形成复合享元对象

实际上享元模式的本质就是缓存共享对象,降低内存消耗

1.2 享元模式的结构

我们可以根据享元模式的定义画出大概的结构图,如下所示:

image-20220402201112689

  • FlyweightFactory:享元工厂,负责创建和管理享元角色
  • Flyweight:抽象享元,是具体享元类的基类,提供具体享元需要的公共接口
  • SharedFlyweight、UnSharedFlyweight:具体享元角色和具体非享元类
  • Client:客户端,调用具体享元和非享元类

1.3 享元模式的实现

根据上面的类图可以实现如下代码:

/**
 * @description: 抽象享元类
 * @author: wjw
 * @date: 2022/4/2
 */
public interface Flyweight {
    /**
 * 抽象享元方法
 * @param state 代码外部状态值
 */
    public void operation(int state);
}
/**
 * @description: 具体享元类
 * @author: wjw
 * @date: 2022/4/2
 */
public class SharedFlyweight implements Flyweight{

    private String key;

    public SharedFlyweight(String key) {
        System.out.println("具体的享元类:" + key + "已被创建");
    }

    @Override
    public void operation(int state) {
        System.out.println("具体的享元类被调用:" + state);
    }
}
/**
 * @description: 非共享的具体类,并不强制共享
 * @author: wjw
 * &#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值