美文网首页js css html
设计模式之享元模式

设计模式之享元模式

作者: Tinyspot | 来源:发表于2023-02-08 22:41 被阅读0次

1. 享元模式(Flyweight Pattern)

  • 定义:Use sharing to support large numbers of fine-grained objects efficiently.(使用共享对象可有效地支持大量的细粒度的对象
  • 享元,即被共享的单元
  • 作用:对象复用(减少对象的创建),节省内存

1.2 享元模式在 Interger 的应用

Integer(包装器类型) 使用享元模式来复用对象
如果要创建的 Integer 对象的值在 -128 到 127 之间(一个字节的大小),会从 IntegerCache 类中直接返回,否则才调用 new 方法创建

2. 示例:实现对象池

享元模式(Flyweight Pattern)是池技术的重要实现方式

虽然可以使用享元模式可以实现对象池,但是这两者还是有比较大的差异,对象池着重在对象的复用上,池中的每个对象是可替换的,从同一个池中获得A对象和B对象对客户端来说是完全相同的,它主要解决复用,而享元模式在主要解决的对象的共享问题,如何建立多个可共享的细粒度对象则是其关注的重点

public class SignInfoFactory {

    private static HashMap<String, SignInfo> pool = new HashMap<>();

    @Deprecated
    public static SignInfo getSignInfo() {
        return new SignInfo();
    }

    /**
     * 从池中获取对象
     */
    public static SignInfo getSignInfo(String key) {
        SignInfo result;

        if (!pool.containsKey(key)) {
            result = new SignInfo4Pool(key);
            pool.put(key, result);
            System.out.println(key + "---建立对象,并放入池中");
        } else {
            result = pool.get(key);
            System.out.println(key + "---直接从池中取得");
        }
        return result;
    }
}
@Data
@AllArgsConstructor
public class SignInfo4Pool extends SignInfo {
    /**
     * 把相同属性提取出来组成一个唯一key
     */
    private String key;
}

@Data
public class SignInfo {
    private String id;
    private String location;
    private String subject;
    private String postAddress;
}

测试

public class SignInfoTest {

    @Test
    public void test1() {
        for (int i = 0; i < 10; i++) {
            SignInfo singInfo = SignInfoFactory.getSignInfo();
            System.out.println(singInfo);
        }
    }

    @Test
    public void test2() {
        for (int i = 1; i < 6; i++) {
            for (int j = 1; j < 3; j++) {
                String key = "科目" + i + "考试地点" + j;
                SignInfoFactory.getSignInfo(key);
            }
        }
        SignInfo signInfo = SignInfoFactory.getSignInfo("科目2考试地点2");
        System.out.println(signInfo);
    }
}

相关文章

  • 好程序员Java培训​分享java设计模式之享元模式

    好程序员Java培训​分享java设计模式之享元模式,Java设计模式中的享元模式。享元模式有点类似于单例...

  • Java设计模式——享元模式

    Java设计模式之享元模式 这期跟大家聊的的设计模式是享元模式,该模式也是结构模式。 简介 利用共享的方式解决大量...

  • Java设计模式_享元模式

    点击链接跳转:设计模式——享元模式

  • 享元模式

    Android进阶之设计模式 享元模式 定义: 使用共享对象有效地支持大量细粒度的对象. 享元模式是池技术的重要实...

  • 二十一、享元模式

    1. 何为享元模式 定义:通过共享已存在的对象,减少创建对象内存开销的设计模式被称为享元模式。 享元模式和单例模式...

  • 享元模式

    swift实战-享元模式 概论:通过共享已存在的对象,减少创建对象内存开销的设计模式被称作享元模式 享元模式Fly...

  • 结构型模式:享元模式

    文章首发:结构型模式:享元模式 七大结构型模式之六:享元模式。 简介 姓名 :享元模式 英文名 :Flyweigh...

  • 好程序员Java培训精讲  java设计模式—享元模式

    好程序员Java培训精讲 java设计模式—享元模式 一、关于享元模式 享元模式有点类似于单例模式,都是只生成一个...

  • 设计模式之享元模式

    享元模式,刚好现在共享单车火,拿来开刀 抽象共享单车 天朝小黄车 50斤的摩拜单车 共享单车类型 单车托管所 客户...

  • 设计模式之享元模式

    享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。 适用场景 如果一个系统中存在大量的相同或...

网友评论

    本文标题:设计模式之享元模式

    本文链接:https://www.haomeiwen.com/subject/dthckdtx.html