zoukankan      html  css  js  c++  java
  • java设计模式-原型(prototype)

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

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

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

    /**
     * Created by wangbin10 on 2018/5/18.
     */
    public class Prototype2 implements Cloneable,Serializable {
        private static final long serialVersionUID = 2L;
        private String name;
        private Integer payAmount;
        private String msg;
    
        public Prototype2() {
        }
    
        public Prototype2(String name, Integer payAmount, String msg) {
            this.name = name;
            this.payAmount = payAmount;
            this.msg = msg;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getPayAmount() {
            return payAmount;
        }
    
        public void setPayAmount(Integer payAmount) {
            this.payAmount = payAmount;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public Prototype2 clone() throws CloneNotSupportedException {
            Prototype2 clone = (Prototype2) super.clone();
            return clone;
        }
    }
    /**
     * Created by wangbin10 on 2018/5/18.
     */
    public class PTest {
        public static void main(String[] args) throws CloneNotSupportedException {
            Prototype2 p1=new Prototype2("zhangsan",23,"hello!welcome to beijing!");
            System.out.println(p1.getName()+p1.getPayAmount()+p1.getMsg());
            Prototype2 p2 = p1.clone();
            p2.setName("lisi");
            p2.setPayAmount(24);
            System.out.println(p2.getName()+p2.getPayAmount()+p2.getMsg());
            System.out.println("============================");
            System.out.println(p1.getName()+p1.getPayAmount()+p1.getMsg());
    
        }
    }
  • 相关阅读:
    Leecode刷题之旅-C语言/python-67二进制求和
    maven 聚合
    maven 继承
    maven 常用命令
    maven 术语
    maven安装
    RabbitMQ 消费消息
    RabbitMQ 生产消息并放入队列
    RabbitMQ 在 web 页面 创建 exchange, queue, routing key
    mybatis 通过实体类进行查询
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/9056130.html
Copyright © 2011-2022 走看看