Flyweight 享元模式
目录
[TOC]
1. 概述
1.1. 自我理解
(1)我们现在要缓存一些数据,比如说用户列表,根据权限的姓名作为key,用户数据自己本身是value
(2)但是我们不需要使用太复杂的ehcache框架之类的去使用,特别特别的简单的。
(3)我们就想基于自己的Map去实现一套东西
1.2. 享元模式的组成
抽象享元(Flyweight)角色 :父接口,以规定出所有具体享元角色需要实现的方法。
具体享元(ConcreteFlyweight)角色:实现抽象享元角色所规定出的接口。
享元工厂(FlyweightFactory)角色 :本角色负责创建和管理享元角色。本角色必须保证享元对象可以被系统适当地共享。当一个客户端对象调用一个享元对象的时候,享元工厂角色会检查系统中是否已经有一个符合要求的享元对象。如果已经有了,享元工厂角色就应当提供这个已有的享元对象;如果系统中没有一个适当的享元对象的话,享元工厂角色就应当创建一个合适的享元对象。
2. UML
3. Example
3.1. 场景
项目初始化时,有些菜单权限、地图、等热数据,这些数据没有更新操作,那么直接加载至内存,避免每次查询数据库。
3.2. 代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
/** * Created * Date: 2021/07/19 11:38 <br/> * Description: 享元模式 * * @author jomin@loserzhao.com * @see */ public class FlyweightPatternDemo { public static void main(String[] args) { Flyweight zhangSanFlyweight = FlyweightFactory.getFlyweightInstance("张三"); Flyweight liSiFlyweight = FlyweightFactory.getFlyweightInstance("李四"); zhangSanFlyweight.execute(); liSiFlyweight.execute(); Flyweight zhangSan2Flyweight = FlyweightFactory.getFlyweightInstance("张三"); zhangSan2Flyweight.execute(); System.out.println(zhangSan2Flyweight.equals(zhangSanFlyweight)); } public static class FlyweightFactory{ public static Map<String, Flyweight> cachePool = new HashMap<String ,Flyweight>(); public static Flyweight getFlyweightInstance(String name){ Flyweight flyweight = cachePool.get(name); if(null == flyweight){ flyweight = new ConcreteFlyweight(); flyweight.setName(name); cachePool.put(name, flyweight); } return flyweight; } } public static interface Flyweight{ String getName(); void setName(String name); void execute(); } public static class ConcreteFlyweight implements Flyweight{ private String name; public void execute() { System.out.println("["+name + "],开始执行任务"); } public String getName() { return name; } public void setName(String name) { this.name = name; } } } |
原创文章,转载请注明: 转载自LoserZhao – 诗和远方[ http://www.loserzhao.com/ ]
本文链接地址: http://www.loserzhao.com/java/designpattern/flyweight-designpattern.html
文章的脚注信息由WordPress的wp-posturl插件自动生成
0 条评论。