进阶学习(3.7) Flyweight Pattern 享元模式

1, 前言

看完了设计模式发现, 设计模式是一种设计思想, 并不是某种规范, 要是让我去记设计模式的规范, 我是无法记住的, 也无法应用实际, 所以此后的设计模式, 都将注重思想理解,  学会举一反三, 好记性不如烂笔头, 虽然有些设计模式看一遍就会了, 但还是记个笔记好一点

2,什么是享元

拆开, 分享元数据, 元数据是啥玩意, 就是基础数据, 不变的数据, 给你是一块砖, 给我也是一块砖, 这里是通用想法, 但不一定是常量数据才能设计成享元模式, 对象也可以, 使用对象就更像原型模式了, 走clone, java 中的 string 对象, 就是享元模式, 每次使用的字符串都存到常量池里面去, 下次直接是从池子里面拿

3, 怎么设计, 最简单的设计, 思想

拿了两次AAA 扑克, 但只创建了一个对象, 就给存起来了, 肯定有人就要问了, 这个模式有什么luan用(虎狼之词), 拿出来的对象又不能使用, 会直接改变 元数据, 也就是缓存容器, 但是不是有某种场景下, 就是想实现种有点像单例模式一样的业务呢, 比如, A, B, C 都使用了某个配置类, 当C修改了配置的时候, A,B去拿也是C修改过的值, 要想实现更复杂的多线程操作, 就得看具体怎么设计了。 诸如, C修改的时候, AB不能修改等问题

public class Flyweight {

    // 享元池
    private static HashMap<String, Poker> pool = new HashMap<>();

    public static Poker getPoker(String name) {
        Poker poker = pool.get(name);
        if (poker == null) {
            System.out.println("创建了扑克:" + name);
            poker = new Poker();
            poker.name = name;
            pool.put(name, poker);
        }
        return poker;
    }

    // 扑克
    static class Poker{
        // 名称
        public String name;
        // 牌数
        public long[] items;
    }

    public static void main(String[] args) {
        getPoker("AAA");
        getPoker("AAA");
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值