(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

浙公网安备 33010602011771号