《Android设计模式与源码解析》学习记录二

来源:互联网 发布:linux hosts 生效 编辑:程序博客网 时间:2024/06/04 19:04

原型模式

1.多用于创建复杂的或者构造耗时的实例

2.原型拷贝可以避免类的初始化,对于复杂对象可以节省大量的数据,硬件资源

3.一个对象需要提供给其他对象进行访问,而且各个调用者可能都需要修改这个对象时,使用原型模式拷贝多个对象供调用者使用

 

可以通过实现Cloneable接口也可以自定义实现。


 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.浅拷贝与深拷贝之分

浅拷贝:副本的字段引用直接引用原本的字段

深拷贝:副本的字段引用使用原本字段的拷贝 

 

 

 

 

 

 

 

 

 

 

 


代码范例:

/**

**clone方法的实现

**

**/

@override

        public Object clone(){

try{

Origin copy=(Origin)super.clone();

copy.string=this.string;//值类型可以直接引用

 

/**

copy.array=this.array;

*/

//浅拷贝,指向了同一个对象,修改copy会影响origin

 

copy.array=(ArrayList<String>)this.array.clone();//深拷贝

}

 

}

Android中原型模式大量使用。最常见的就是Intent。大对象在使用时会占用大量内存,而clone是一个native方法,可以直接操作内存中的二进制流,性能相比new提升明显。

Intentclone方法与其他不同,常见的clone是调用Object类的clone方法(代码里为super.clone())而Intent是通过new的方式创建copy对象。


工厂模式

借助于创建对象的接口,让子类决定实例化。

复杂对象适合使用工厂模式,正常new创建无需使用工厂模式。

 

使用反射简洁地表示生产子类对象:

Public class ConcreteFactory extends Factory{

/**

**@param clz子类的类对象

**@return T根据子类的类对象实例化的子类

**/

@override

public <T extends Product> T creatProduct(Class<T> clz){

Product p=null;

try{

P=(Product)Class.forName(clz.getName()).getInstance();

}

catch(Exception e){

e.printStackTrace();

}

return (T)p;

}

}

 

如果只有一个工厂类就可以生产所有product对象的话,可以做成静态工厂。

工厂方法模式依赖抽象的架构,可以根据不同的任务扩展子类。


0 0
原创粉丝点击