定义观察者接口,可以有多个观察者实现该接口。观察者经常和责任链一起使用,观察者可以当做责任链的一环。
重复利用对象,常用在输入工具,例如word中,比如你键盘敲击一个字母A。那么如果没有享元会怎么样呢,每敲击一次,就会有一个A对象产生。享元模式事先把A~Z都存下来,放到一个池子中。当做共享的元数据
连接池,线程池,都是用的享元模式
Java中的字符串,都放在字符串常量池里面
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
// true
System.out.println(s1 == s2);
// false
System.out.println(s1 == s3);
// false
System.out.println(s3 == s4);
// true
System.out.println(s3.intern == s1);
// true
System.out.println(s.intern == s4.intern);
}
解释:
s1 == s2是因为字符串常量池已经有"abc",用的是同一个
s3 == s4是因为new操作重新分配了内存,内存地址不同,所以false
s3.intern == s1是因为s3.intern表示的是s3对应的常量池引用,因为虽然s3开辟了内存,但是指向的常量也会从常量池里面拿,不会新创建"abc""
享元的元对象,可以组合成另外的元对象,所以可以和组合结合起来
原文:https://www.cnblogs.com/darope/p/12731911.html