设计方法(对象生成、复用)
Singleton Pattern (单例模式)
核心思想:某些类在应用运行期间 只需要一个实例
优点:
- 它其实式通过全局变量进行的优化。
- 节省创建新的对象的时间
- 系统内存的使用也会减少
实现方法: - 设置静态和 final变量来存储单一实例对象
- 将构造器设置为private,提供静态方法来获取单一实例对象
Flyweight Pattern(轻量模式)
核心思想:允许在应用 中不同部分共享使用objects
优点:减少object的数量
实现方法(直接口述):
内部特征:不管在什么场合使用该object,内部特征都不变
外部特征:不是固 定的,需要在不同场合context分别指派/计算其值
现在有一个接口A,A有两个抽象方法getx和gety
a1(有两个属性x和y)实现接口A
a1实现了两个方法,在实现getx的时候直接将这个特征返回,在实现gety的时候使用switch语句根据用户输入条件返回不同的值(这就是轻量模式的关键所在)
在这个例子中x就是内部特征,y就是外部特征
prototype pattern(原型模式)
核心思想:使用copy代替new
优点:直接new的时空代价高,尤其是需要 与外部I/O、 络、数据库打交道时候
实现方法:
java中提供了Cloneable接口,A继承并重写clone()方法(这个方法已经在接口中实现了),在实现的类中实现一些set方法就可以了。
在使用的时候先new一个A,后面的全部调用A.clone(),然后加上set方法用来更新新的对象的值
Object Pool Pattern(对象池模式)
核心思想:将暂时没有使用但是以后要用到的比如vector,map这些保存起来,在下一次使用的时候直接调用。
实现方法:主要就是引用的转移。
优点:跑得快
缺点:原本可被GC的对象,现在要留在pool中,导致内存浪费—— 用空间换时间
Canonicalizing Objects(规范化)
- 不要保留对象的多个拷贝,仅保留少量object即可
- ==比equals()的效率更高,所以尽可能将object 转化为简单数据类型加以存储和处理
- 用int取代其他常量object (int快啊)
avoid garbage collection
核心思想:减少创建object的的数量,因为GC是由代价的
string专题
String s = “java”
类似于这样的在常量池,如果是new的就在堆中。在java7之前,string constant pool在metaspace,之后在heap中单独开辟了一块区域。
创建了引 类型的常量之后,首先会判断一下是不是常量池中已经有了这个常量,如果有就直接阿江引用指向它,如果没有就会新建一个。
尽量使用在编译阶段就能解决的初始化,比如:
String s = “hi Mr. Buddy”;
而不是:
String s = new String(“hi ” + “Mr. ” + ” ” + “Buddy”);
问题分析
轻量模式和单例模式
- Flyweight在object层面的复用比Singleton更灵活(单例模式不区分场景,统一使用一个实例;而轻量对象在具有多种的表现形式)
- 可以认为轻量模型是immutable类型的,单例模型是mutable类型的
原型模式的深浅拷贝

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!