HIT软件构造 代码优化

设计方法(对象生成、复用)

Singleton Pattern (单例模式)

核心思想:某些类在应用运行期间 只需要一个实例
优点:

  1. 它其实式通过全局变量进行的优化。
  2. 节省创建新的对象的时间
  3. 系统内存的使用也会减少
    实现方法:
  4. 设置静态和 final变量来存储单一实例对象
  5. 将构造器设置为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(规范化)

  1. 不要保留对象的多个拷贝,仅保留少量object即可
  2. ==比equals()的效率更高,所以尽可能将object 转化为简单数据类型加以存储和处理
  3. 用int取代其他常量object (int快啊)

avoid garbage collection

核心思想:减少创建object的的数量,因为GC是由代价的

int theInt = new Integer(string).intValue(); 创建一个Integer 
int theInt = Integer.parseInt(string); 无需创建对象

string专题

String s = “java”
类似于这样的在常量池,如果是new的就在堆中。在java7之前,string constant pool在metaspace,之后在heap中单独开辟了一块区域。
创建了引号类型的常量之后,首先会判断一下是不是常量池中已经有了这个常量,如果有就直接阿江引用指向它,如果没有就会新建一个。
尽量使用在编译阶段就能解决的初始化,比如:
String s = “hi Mr. Buddy”;
而不是:
String s = new String("hi " + "Mr. " + " " + “Buddy”);

问题分析

轻量模式和单例模式

  1. Flyweight在object层面的复用比Singleton更灵活(单例模式不区分场景,统一使用一个实例;而轻量对象在具有多种的表现形式)
  2. 可以认为轻量模型是immutable类型的,单例模型是mutable类型的

原型模式的深浅拷贝

缺省的拷贝是浅拷贝,对于immutable类型的变量是没有问题。
但是如果是mutable类型的变量就必须进行一些new的操作来避免相同的引用指向相同的区域
欢迎关注公众号BBIT
让我们共同学习共同进步!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值