定义

使用拷贝来创建一个新的对象
用原型实例指定创建对象的种类,通过拷贝这些圆心来创建新的实例

背景

其实在android的源码里面,我们使用很多的Intent,就使用了原型设计模式,使用原型设计模式其实就是减少了我们手动设置对象的属性值的繁冗代码。

分析
  • 第一步
    实现Cloneable接口,重写clone方法
  public class User implements Cloneable {@Override protected User clone() throws CloneNotSupportedException {return (User) super.clone();}
}
  • 第二步
    在需要使用的地方,则可以用如下代码进行获取一个新的User对象
public class Client {public static void main(String[] args) throws CloneNotSupportedException {User user = new User();User newUser = user.clone();}
}
注意

当我们使用原型设计模式的时候,一定要注意浅拷贝和深拷贝的使用,也就是当User对象里面有其他对象的属性的时候,那么作为对象的属性都需要实现Cloneable和重写clone方法,代码如下所示

public class User implements Cloneable{public String userName;public Address userAddress;@Overrideprotected User clone() throws CloneNotSupportedException {User user = (User) super.clone();// 把地址也做一次克隆,达到深拷贝user.userAddress = userAddress.clone();return user;}
}

public class Address  implements Cloneable{public Address(String addressName, String city) {this.addressName = addressName;this.city = city;}@Overrideprotected Address clone() throws CloneNotSupportedException {return (Address) super.clone();}public String addressName;public String city;
}
完美结束

注意:

  • 使用super.clone()创建的对象是不会执行构造方法的
  • 原型实例分为浅拷贝和深拷贝,浅拷贝只会复制值,深拷贝不仅会复制值也会复制引用

android设计模式之原型模式相关推荐

  1. Android设计模式之——原型模式

    一.介绍 原型模式是一个创建型的模式.原型二字表明了该模型应该有一个样板实例,用户从这个样板对象中复制出一个内部属性一致的对象,这个过程也就是我们俗称的"克隆".被复制的实例就是我 ...

  2. 【GOF23设计模式】原型模式

    [GOF23设计模式]原型模式 来源:http://www.bjsxt.com/  一.[GOF23设计模式]_原型模式.prototype.浅复制.深复制.Cloneable接口  浅复制 1 pa ...

  3. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:webabcd 介绍 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. ...

  4. 教你如何一篇博客读懂设计模式之—--原型模式

    教你如何一篇博客读懂设计模式之----原型模式 what:是什么 原型模式: 用于创建重复的对象,既不用一个属性一个属性去set和get,又不影响性能,原型模式产生的对象和原有的对象不是同一个实例,他 ...

  5. 二十三种设计模式之原型模式

    今天继续探讨GOF二十三种设计模式的原型模式,原型模式也是属于创建型模式的一种 原型模式通俗的讲就是对象复制的过程,即通过一个原型对象,我可以得到一个该对象的克隆. 下面来看下原型模式的第一种写法-- ...

  6. C#设计模式(6)——原型模式(Prototype Pattern)

    一.引言 在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在 ...

  7. 设计模式回顾——原型模式(C++)

    文章目录 1 前言 2 什么是原型模式 2.1 原型模式组成 2.2 原型模式UML图 2.3 原型模式作用 3 原型模式优缺点 4 什么地方使用原型模式 5 原型模式实现 6 原型模式与构造函数 1 ...

  8. 设计模式之 原型模式

    原型模式应用场景举例:  GG和MM经常在QQ上聊天,但是GG打字的速度慢如蜗牛爬行,每次MM在瞬间完成恢复或者问候是,GG都会很紧张的去尽力快速打字,尽管如此,还是让MM有些不高心,MM说回复信息这 ...

  9. 北京Java培训 | java设计模式之原型模式

    克隆羊问题 现在有一只羊tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和tom羊 属性完全相同的10只羊. 传统方式解决克隆羊问题 传统的方式的优缺点 1) 优点是比较好理解,简 ...

最新文章

  1. 如何看待那些互相矛盾的论文?
  2. 物竞天择,适者生存,架构进化之路
  3. 1.0 基础、标示符、常量、数据类型(enum 枚举,struct 结构体)、操作符、循环、数组...
  4. python redis集群_Python3 redis集群连接 (带密码验证)
  5. matlab中方波信号的谐波表示
  6. 如何从Gitee中拉取项目到HBuilder中?
  7. 【Linux网络编程学习】预备知识(网络字节序、IP地址转换函数、sockaddr数据结构)
  8. jquery-ajax的同步与异步
  9. 求整数的位数及各位数字之和 (15 分)
  10. 小米笔试题:无序数组中最小的k个数
  11. 小微风控模型汇总与企业征信报告指南
  12. 力扣——204. 计数质数
  13. matlab图片文件批量处理
  14. 如何查看Linux的系统是64位的还是32位的
  15. CUMT矿大----电路与数字系统实验一 一位全减器
  16. ubuntu16.04server安装dell服务器H750raid卡驱动
  17. Linux两主机之间快速传输大量小文件
  18. 磁盘 I/O 和网络
  19. 短信链接复制搜索公众号,短信如何推广公众号?
  20. AD转换精度提高方法

热门文章

  1. linux中查看ftp所有用户,怎么查看linux下的所有用户
  2. O2O创业哪家强 一文了解深圳60多家O2O创业公司
  3. 2021年安全员-B证(陕西省)考试资料及安全员-B证(陕西省)考试试卷
  4. 嵌入式文件系统FatFS和LittleFS对比
  5. ory Oathkeeper Ecosystem
  6. 蓝桥杯JavaB饮料换购
  7. 死锁如何定位,修复?及其预防?
  8. maet9升级鸿蒙,华为Maet9和P9有什么区别
  9. 大屏幕和折叠屏: 让您的 Android 游戏登上更大的舞台
  10. 联想z470 win7 64位双系统继续恢复镜像法安装黑苹果10.9.3