有时候创建对象是需要耗费很多资源,但是每个对象之间又有大量的重复。我们可以选择在创建好一个对象后,以之作为模板克隆出其他对象,稍作修改,即可用于其他地方。

需要实现Cloneable接口,重写clone()方法。其实就是调用的Object类的clone()方法。

克隆对象只是复制了原对象的数据,每个对象还是独立的,他们的内存地址不同。

  1. /**
  2. * Created by wangbin10 on 2018/5/18.
  3. */
  4. public class Prototype2 implements Cloneable,Serializable {
  5. private static final long serialVersionUID = 2L;
  6. private String name;
  7. private Integer payAmount;
  8. private String msg;
  9.  
  10. public Prototype2() {
  11. }
  12.  
  13. public Prototype2(String name, Integer payAmount, String msg) {
  14. this.name = name;
  15. this.payAmount = payAmount;
  16. this.msg = msg;
  17. }
  18.  
  19. public String getName() {
  20. return name;
  21. }
  22.  
  23. public void setName(String name) {
  24. this.name = name;
  25. }
  26.  
  27. public Integer getPayAmount() {
  28. return payAmount;
  29. }
  30.  
  31. public void setPayAmount(Integer payAmount) {
  32. this.payAmount = payAmount;
  33. }
  34.  
  35. public String getMsg() {
  36. return msg;
  37. }
  38.  
  39. public void setMsg(String msg) {
  40. this.msg = msg;
  41. }
  42.  
  43. public Prototype2 clone() throws CloneNotSupportedException {
  44. Prototype2 clone = (Prototype2) super.clone();
  45. return clone;
  46. }
  47. }
  1. /**
  2. * Created by wangbin10 on 2018/5/18.
  3. */
  4. public class PTest {
  5. public static void main(String[] args) throws CloneNotSupportedException {
  6. Prototype2 p1=new Prototype2("zhangsan",23,"hello!welcome to beijing!");
  7. System.out.println(p1.getName()+p1.getPayAmount()+p1.getMsg());
  8. Prototype2 p2 = p1.clone();
  9. p2.setName("lisi");
  10. p2.setPayAmount(24);
  11. System.out.println(p2.getName()+p2.getPayAmount()+p2.getMsg());
  12. System.out.println("============================");
  13. System.out.println(p1.getName()+p1.getPayAmount()+p1.getMsg());
  14.  
  15. }
  16. }

java设计模式-原型(prototype)的更多相关文章

  1. 【设计模式】Java设计模式 - 原型模式

    [设计模式]Java设计模式 - 原型模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起 ...

  2. Java设计模式-原型模式(Prototype)

    原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象.这就是选型模式的用意. 原型模式的结构 原型模式要求对象实现一个可以“克 ...

  3. 4.java设计模式-原型模式(prototype)

    在<JAVA与模式>一书中开头是这样描述原型(Prototype)模式的: 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更 ...

  4. Java 实现原型(Prototype)模式

    public class BaseSpoon implements Cloneable {//spoon 匙, 调羹 String name; public String getName() { re ...

  5. Java设计模式:Prototype(原型)模式

    概念定义 使用原型实例指定待创建对象的种类,并通过拷贝该原型来创建新的对象.Prototype模式允许一个原型对象克隆(复制)出多个与其相同的对象,而无需知道任何如何创建的细节. 应用场景 对象的创建 ...

  6. Objective-C设计模式——原型Prototype(对象创建)

    1.原型 原型设计模式所谓原型设计模式,其实就是对象复制,这个特性在所有语言基本上都是存在的. 我们知道在OC中,对象赋值其实是对对象的引用复制,其实就是相当于C语言中的指针.创建了一个新的变量,但是 ...

  7. java设计模式---原型模式

    原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式结构图 通俗来说:原型模式就是深拷贝和浅拷贝的实现. 浅拷贝 只实现了值拷贝,对于引用对象还是 ...

  8. 我的Java设计模式-原型模式

    "不好意思,我是卧底!哇哈哈哈~"额......自从写了上一篇的观察者模式,就一直沉浸在这个角色当中,无法自拨.昨晚在看<使徒行者2>,有一集说到啊炮仗哥印钞票,我去, ...

  9. 设计模式-原型(prototype)

     一.概念 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 二.模式动机 当已有一个对像,暂且称之为原型对象,需要一个新的对像,该对像和已有的原型对像具有相同的类型,且里面的属性大部分 ...

随机推荐

  1. Cordova/PhoneGap 安卓开发环境搭建

    此文为个人原创作品,如有不正确之处,恳请大家指出,并请您谅解,转载请说明出处. 准备阶段: 必备: JDK(根据自己的开发平台下载相应的安装包,可能需要FQ) Nodejs  (根据自己的开发平台下载 ...

  2. 浅谈java枚举类

    一.什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二.为什么不用静态常量来替代枚举类呢? public static final int SEASO ...

  3. jQuery.noop

    一个空函数 当你仅仅想要传递一个空函数的时候,就用他吧.这对一些插件作者很有用,当插件提供了一个可选的回调函数接口,那么如果调用的时候没有传递这个回调函数,就用jQuery.noop来代替执行.

  4. Matlab Tricks(十四) —— 句柄(handle)(图形对象属性的读取与修改)

    0. 句柄的获得 H = subplot(1,2,1); saveas(H, [pathname,filename], 'jpg'); 1. h = plot(-) a = 0:10:360; x = ...

  5. redis支持哪些数据类型

    虽然redis的key和value之支持string和byte[],但是仍可以以string的形式保存其他格式,甚至是图片. 1)String: 用set(key,value),get(key) 2) ...

  6. DDD实战12 值对象不创建表,而是直接作为实体中的字段

    这里的值对象如下风格: namespace Order.Domain.PocoModels { //订单地址 //虽然是值对象 但是不继承ValueObject //因为继承ValueObject会有 ...

  7. 开启win10下Ubuntu子系统的SSH服务

    原文:开启win10下Ubuntu子系统的SSH服务 版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog.csdn.net/zhouzme https://blog.csdn ...

  8. crossplatform---Nodejs in Visual Studio Code 03.学习Express

    1.开始 下载源码:https://github.com/sayar/NodeMVA Express组件:npm install express -g(全局安装) 2.ExpressRest 打开目录 ...

  9. SDL(01-10)

    SDL中的函数需要先初始化SDL才能用 : //Initialize SDL ) { printf( "SDL could not initialize! SDL_Error: %s\n&q ...

  10. C# .NET锁屏程序(顺带屏蔽任务管理器)

    原文:C# .NET锁屏程序(顺带屏蔽任务管理器) 第一步:将窗体的FormBorderStyle设置为none,WindowState设为Maximized 占据整个屏幕. 第二步:使用钩子监控全局 ...