那就从老师讲的例子开始入手:
例如: Integer number1 = 13;
Integer number2 = 13;
System.out.println(number1==number2);
打印的结果却是ture;说明number1和number2是同一个对象,但是当赋值的数字大于127后,结果就是false了.这说明:对于基本数据类型的整数装箱成为Integer类型的对象时,如果这个整数在一个字节之内,也就是在-128~127之间,那么就想把这个封装好的Integer对象放到一个缓冲池中,如果下次再用到这个对象,就直接从缓存池中拿来用,这样就节省了空间.
对于计算机而言,它认为像这样的小数出现的次数会很多(即使用的频率高),所以将他们共用一个对象,否则,用到一个就会创建一个对象,浪费了空间.
当一个对象很小,又在多个地方使用,并且对它的使用都是一样的,这时就可以只创建一个这样的对象,其他地方使用时,也就使用这个对象.这种思想就是享元模式.
享元模式在word中也有体现:在word中会出现很多一样的英文字符,如果写一个字符就创建一个对象,那么word中就会有很多个小对象,会占据很多的空间.所以如果就创建26个对象分别指向这些字符,对于这些字符,唯一不同的就是在word中的位置不同而已.
例如:字符i,要显示不同位置的i字符就可以这样表述:
I.display(int x,int y)这样就可以大大的节省空间
总结:享元模式就是:当有很多个小的对象,它们有很多相同的属性,那么就可以把它们变成一个对象,那些不同的属性把它变成方法的参数传入(称为外部状态),那些相同的属性称为这个对象的内部参数.
希望对你有用 |