享元模式

享元模式

享元模式(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();
    }
}
相关推荐
violet-lz1 分钟前
C++ 内存分区详解
开发语言·jvm·c++
汤姆yu5 分钟前
基于springboot的林业资源管理系统
java·spring boot·后端
软件管理系统7 分钟前
基于Spring Boot的医疗服务系统的设计与实现
java·spring boot·后端
软件管理系统10 分钟前
基于微信小程序的健身房管理系统
java·tomcat·maven
聪明努力的积极向上14 分钟前
【设计】分批查询数据通用方法(基于接口 + 泛型 + 定点复制)
开发语言·设计模式·c#
大志哥12315 分钟前
IntelliJ IDEA父子工程中导入公网远程备份项目到新目录
java·ide·intellij-idea
廋到被风吹走16 分钟前
【Spring】DefaultListableBeanFactory 详解
java·python·spring
东东的脑洞16 分钟前
【面试突击八】Spring IOC:Bean 创建流程全解析(从 getBean 到 AOP 代理生成)
java·spring·面试
灰色人生qwer18 分钟前
VS Code 配置Java环境
java·开发语言
tgethe19 分钟前
Java 链表(LinkedList)
java·开发语言·链表