博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android设计模式(七)--原型模式
阅读量:6710 次
发布时间:2019-06-25

本文共 3245 字,大约阅读时间需要 10 分钟。

1、定义:

用原型实例指定创建对象种类,并通过拷贝这些原型创建新的对象。

2、目的:

从一个对象创建另外一个可定制的对象,而不须要知道不论什么创建细节。

3、作用:

   3.1、简化对象的创建。

   3.2 、对于处理大对象。性能上比new 高出非常多。

4、分类:

   4.1浅拷贝:拷贝对象中的主要的数据类型。对于数组、容器对象、引用对象等都不会拷贝。

   4.2深拷贝:将全部类型进行拷贝。

5、注意:

    5.1对象实现Cloneable接口,必须将Object clone() 方法改为public;

    5.2对于基本数据类型,其封装类型。String不须要进行处理。

他们进行的均是深拷贝。

6、简单的demo:

浅拷贝:

package com.example.demo.Prototype;/** *  浅拷贝 * @author qubian * @data 2015年6月4日 * @email naibbian@163.com * */public class Prototype implements Cloneable {	private int num;	private String name;	public int getNum() {		return num;	}	public void setNum(int num) {		this.num = num;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	@Override	public Object clone() {		Prototype prototype = null;		try {			prototype = (Prototype) super.clone();				} catch (CloneNotSupportedException e) {			e.printStackTrace();		}		return prototype;	}}
深拷贝:
package com.example.demo.Prototype;import java.util.ArrayList;import java.util.Vector;/** * 深拷贝 * @author qubian * @data 2015年6月4日 * @email naibbian@163.com * */public class DeepPrototype implements Cloneable{	private String name;	private ArrayList
arrayList; private DeepObject deepObject; public String getName() { return name; } public void setName(String name) { this.name = name; } public ArrayList
getArrayList() { return arrayList; } public void setArrayList(ArrayList
arrayList) { this.arrayList = arrayList; } public DeepObject getDeepObject() { return deepObject; } public void setDeepObject(DeepObject deepObject) { this.deepObject = deepObject; } /** * clone 方法 */ @SuppressWarnings("unchecked") @Override public Object clone() { DeepPrototype prototype = null; try { prototype = (DeepPrototype) super.clone(); prototype.arrayList=(ArrayList
) this.arrayList.clone(); prototype.deepObject=(DeepObject) this.deepObject.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return prototype; } class DeepObject implements Cloneable { String name; protected Object clone() { DeepObject deep=null; try { deep= (DeepObject) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return deep; }; }}

7、原型模式在Android中的运用:

最明显的样例就是Intent,可是好像还未知其用处。

可是细看,竟然还是new 的对象。

public class Intent implements Parcelable, Cloneable {    /**     * Copy constructor.     */    public Intent(Intent o) {        this.mAction = o.mAction;        this.mData = o.mData;        this.mType = o.mType;        this.mPackage = o.mPackage;        this.mComponent = o.mComponent;        this.mFlags = o.mFlags;        if (o.mCategories != null) {            this.mCategories = new ArraySet
(o.mCategories); } if (o.mExtras != null) { this.mExtras = new Bundle(o.mExtras); } if (o.mSourceBounds != null) { this.mSourceBounds = new Rect(o.mSourceBounds); } if (o.mSelector != null) { this.mSelector = new Intent(o.mSelector); } if (o.mClipData != null) { this.mClipData = new ClipData(o.mClipData); } } @Override public Object clone() { return new Intent(this); }}

转载地址:http://iualo.baihongyu.com/

你可能感兴趣的文章
ASP.NET 2.2 Preview 1首次支持Java SignalR客户端
查看>>
Netty 源码分析之 零 磨刀不误砍柴工 源码分析环境搭建
查看>>
[deviceone开发]-动画示例源码
查看>>
温故js系列(13.1)-有意思的30题_题目
查看>>
实现iOS图片等资源文件的热更新化(一): 从Images.xcassets导出合适的图片
查看>>
以打字形式展示placeholder的插件
查看>>
WebComponent魔法堂:深究Custom Element 之 标准构建
查看>>
真的是好久没写博客了
查看>>
基于 Node.js 的轻量「持续集成」工具 CIZE
查看>>
magento2 ajax机制 (customer-data)
查看>>
【二次元的CSS】—— CSS3画的能换频道的电视机(合集)
查看>>
组件化可视化图表 - Recharts
查看>>
magento 2模块开发实例helloworld模块
查看>>
关于if-else流程图的画法
查看>>
一天一点linux(10):ubuntu如何设置静态IP和动态IP?
查看>>
AndroidStudio好用的插件
查看>>
聊一聊 JS 中的『隐式类型转换』
查看>>
calc 与 box-sizing 的替代
查看>>
如何使用 Java 构建微服务?
查看>>
通过 SignalR 类库,实现 ASP.NET MVC 的实时通信
查看>>