享元模式

享元模式

享元模式(Flyweight Pattern)用于减少创建对象的数量,以减少内存占用和提高性能。这种模式尝试重用现有的细粒度对象,而不是每次都重新创建新的对象。享元模式特别适用于大量相似对象的场景,这些对象的状态可以被外部状态共享。

案例

设计一个足道店,服务员可以重复提供服务

java 复制代码
public abstract class AbstractWaiter {
    Integer id;
    String name;
    boolean canService;
    public AbstractWaiter(Integer id,String name){
        this.id = id;
        this.name = name;
        canService = true;
    }
    public abstract void service();
    public abstract void end();
}
java 复制代码
public class Waiters extends AbstractWaiter{
    public Waiters(Integer id, String name) {
        super(id, name);
    }

    @Override
    public void service() {
        System.out.println(id + ":开始服务");
        this.canService = false;
    }

    @Override
    public void end() {
        System.out.println(id + ":结束服务");
        this.canService = true;
    }
}
java 复制代码
public class ZuDao {
    private Map<Integer,Waiters> poll = new HashMap<>();

    {
        Waiters zhangsan = new Waiters(1, "zhangsan");
        Waiters lisi = new Waiters(2, "lisi");
        poll.put(1,zhangsan);
        poll.put(2,lisi);
    }

    public Waiters getWaiter(Integer id){
        Waiters waiter = poll.get(id);
        if(waiter != null && waiter.canService){
            return waiter;
        }
        return null;
    }

}

测试:

java 复制代码
public class Main {
    public static void main(String[] args) {
        ZuDao zuDao = new ZuDao();
        Waiters waiter = zuDao.getWaiter(1);
        waiter.service();

        Waiters waiter1 = zuDao.getWaiter(2);
        waiter1.service();

        Waiters waiter2 = zuDao.getWaiter(1);
        System.out.println(waiter2);

        waiter.end();
        waiter1.end();
    }
}
相关推荐
小小小米粒4 小时前
Maven Tools
java
kali-Myon4 小时前
2025春秋杯网络安全联赛冬季赛-day1
java·sql·安全·web安全·ai·php·web
我是咸鱼不闲呀4 小时前
力扣Hot100系列20(Java)——[动态规划]总结(下)( 单词拆分,最大递增子序列,乘积最大子数组 ,分割等和子集,最长有效括号)
java·leetcode·动态规划
清水白石0085 小时前
深入解析 LRU 缓存:从 `@lru_cache` 到手动实现的完整指南
java·python·spring·缓存
符哥20085 小时前
C++ 进阶知识点整理
java·开发语言·jvm
Sayuanni%35 小时前
初阶_多线程1(线程含义与关键属性)
java
程序媛徐师姐5 小时前
Java基于微信小程序的模拟考试系统,附源码+文档说明
java·微信小程序·java模拟考试系统小程序·模拟考试微信小程序·模拟考试系统小程序·模拟考试小程序·java模拟考试小程序
疯狂敲代码的老刘5 小时前
JDK 1.6到25 全版本网盘合集 (Windows + Mac + Linux)
java·linux·windows·macos·jdk
夕除5 小时前
js--15
java·jvm·spring
曾经的三心草5 小时前
redis-9-集群
java·redis·mybatis