07-设计模式——享元模式

设计模式——享元模式

模式定义

运用共享技术有效地支持大量细粒度的对象,,这些对象一部分内部状态是相同的。

优点

如果系统有大量类似的对象,可以节省大量的内存及CPU资源

Class Diagram

  • Flyweight:享元对象
  • IntrinsicState:内部状态,享元对象共享内部状态
  • ExtrinsicState:外部状态,每个享元对象的外部状态不同

LKYhNV.png

package com.example.designpatterns.flyweight;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @program: DesignPatterns
 * @description: 享元模式
 * @author: Coder_Pan
 * @create: 2022-04-13 14:09
 **/
public class FlyWeightTest {

    public static void main(String[] args) {
        //1、拿到工厂
        TreeNode iTreeNode1 = new TreeNode(3, 4, TreeFactory.getTree("苹果树", "XXXXXXXXXXXXXXXXXX"));
        TreeNode iTreeNode2 = new TreeNode(5, 4, TreeFactory.getTree("苹果树", "XXXXXXXXXXXXXXXXXX"));

        TreeNode iTreeNode3 = new TreeNode(3, 4, TreeFactory.getTree("苹果树1", "XXXXXXXXXXXXXXXXXX"));
        TreeNode iTreeNode4 = new TreeNode(5, 4, TreeFactory.getTree("苹果树1", "XXXXXXXXXXXXXXXXXX"));
    }
}

/**
 * 创建树工厂🏭
 */
class TreeFactory {
    private static Map<String,Tree> map = new ConcurrentHashMap<>( );

    public static Tree getTree(String name,String data){
        //如果不存在,即创建
        if (map.containsKey( name )){
            return map.get(name);
        }
        //若存在,直接引用map中存在的数据返回
        Tree tree = new Tree(name, data);
        map.put(name, tree);
        return tree;
    }
}
/**
 * 定义一棵树
 */
 class Tree {
    /**
     * 为了保证多线程下的安全,设置为final,不可修改
     */
    private final String name;
    private final String data;


    public Tree(String name, String data) {
        /**
         * 第一次创建的时候打印,如果存在了就不会创建,即不会打印
         */
        System.out.println("创建" + name );
        this.name = name;
        this.data = data;
    }

    public String getName() {
        return name;
    }

    public String getData() {
        return data;
    }

}
/**
 * 定义一个结点,标识树在地图上的位置
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
class TreeNode {
    private int x;
    private int y;
    private Tree tree;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值