(11)享元模式

概念

享元模式用于减少创建对象的数量,以减少内存占用和提高性能。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。

享元模式用得比较多的是池化技术,如常量池,线程池,连接池等等。

  • java中的常量池使用的就是享元模式。比如String s = "abc",会先去常量池中找是否有"abc",如果有则返回,没有则新建"abc"再返回,这样减少了String对象的创建。
  • 代码中可以定义HashMap,每次拿对象时,通过key去获取对象,如果拿到则返回,拿不到就新创建对象存入HashMap再返回

实现方式

import java.util.HashMap;
import java.util.Map;

/**
 * 享元模式
 */
public class Demo {
    private static Map<String, Person> cache = new HashMap<>();

    public static void main(String[] args) throws InterruptedException {
        Person p1 = getPerson("123");
        Person p2 = getPerson("123");
        Person p3 = new Person("123");
        System.out.println(p1 == p2);
        System.out.println(p1 == p3);
    }

    // 从缓存拿,没有就创建
    public static Person getPerson(String cardNo) {
        Person person = cache.get(cardNo);
        if (person == null) {
            person = new Person(cardNo);
            cache.put(cardNo, person);
        }
        return person;
    }
}

class Person {
    private String cardNo; // 身份证号

    public Person(String cardNo) {
        this.cardNo = cardNo;
    }
}

true
false

posted @ 2021-11-30 17:30  、嘎路的米。  阅读(44)  评论(0)    收藏  举报