Java原型模式

原型模式

  原型模式也称克隆模式。原型模式jian ming zhi yi,就是先创造出一个原型,然后通过类似于Java中的clone方法,对对象的拷贝,克隆类似于new,但是不同于new。new创造出来的对象采用的是默认值。克隆出来的对象与原型对象相同,同时不会影响原型对象,然后在修改克隆出来的对象。

实现

  继承Cloneable接口,重写clone方法。(此处的clone方法不是接口Cloneable中的抽象方法,而是obj中的方法)

应用场景

  例:js中继承就是prototype就是采用原型模式。创建一个对象比较耗时时,采用原型模式。

Demo

public class Sheep implements Cloneable{
  private String name;
  private Date brithday;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public Date getBrithday() {
    return brithday;
  }
  public void setBrithday(Date brithday) {
    this.brithday = brithday;
  }
  public Sheep() {
  }

  public Sheep(String name, Date brithday) {
    super();
    this.name = name;
    this.brithday = brithday;
  }

  @Override
  public String toString() {
    return "Sheep [name=" + name + ", brithday=" + brithday + "]";
  }
  @Override
  protected Object clone() throws CloneNotSupportedException {

  //此处的克隆只是简单的clone,原型模式中的对象中属性所引用的对象一旦修改,clone出来的对象的值也会随之改变,此处为浅复制
    Object obj = super.clone();
    return obj;
  }
}

public class Client {

  public static void main(String[] args) throws CloneNotSupportedException {
    Sheep s1 = new Sheep("多里",new Date());
    System.out.println(s1);
    Sheep s2 = (Sheep) s1.clone();
    System.out.println(s2);
  }
}

  @Override
  protected Object clone() throws CloneNotSupportedException {

//在复制的时候,同时对属性进行复制,通过此方式来进行深复制。
    Object obj = super.clone();
    Sheep s = (Sheep)obj;
    s.brithday = (Date) this.brithday.clone();
    return obj;
  }

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

前端学习重点-原型与原型链

原文链接:什么是原型?每一个函数都包含一个prototype属性,这是一个指针指向"原型对象"(prototypeobject),也就是我们平时说的原型。每一个函数都包含不同的原型对象。当将函数用作构造函数的时候,新创建的对象(实例)会从原型对象上继承属性

「超全超细」Java设计模式图文详解!!!

java设计模式—原型模式Java原型模式1、概述  啥是原型模式?  原型模式属于设计模式中的创建型中的一员,  原型模式:使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象!  说大白话就是自己复制自己,通过原生对象复制出一个新的对象,这两个对象结构相同且相似;  需要注意的是,原型对象自己不仅是个对象还是个工厂!并且通过克隆方式创

Js中 constructor, prototype, __proto__ 详解

本文为了解决以下问题:__proto__(实际原型)和prototype(原型属性)不一样!!!constructor属性(原型对象中包含这个属性,实例当中也同样会继承这个属性)prototype属性(constructor.prototype原型对象)__proto__属性(实例指向原型对象的指针)<br/首先弄清楚几个概念:<br/

JavaScript学习总结(十七)——Javascript原型链的原理

一、JavaScript原型链ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法。其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。在JavaScript中,用__proto__属性来表示一个对象的原型链。当查找一个对象的属性时,JavaScript会向上遍历原型

JS原型、原型链深入理解

原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有”prototype”属性,函数对象有”prototype”属性,原型对象有”constructor”属性。原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有”prototype”属性,函数对象有”prototype”属性,原型对

Java原型模式 - HelloWorld