zoukankan      html  css  js  c++  java
  • 设计模式:Prototype 原型模式

    原型模式:

    通过某个类的实例来创建对象

    使用原型模式的好处:

    好处是什么呢?当我们需要多次重复的创建一个类的示例的时候,我们可以使用new但是,new不仅仅耗费内存而且,如果new 某个类的构造方法中有多个参数,那么岂不是相当的麻烦?

    联想:

    我们可以把原型模式想象成同学们平时差别人作业(当然,我并不赞同大家抄别人作业),如果写某个科目的作业的时候,大家的作业可以有很大程度的相同。

    比如:

    让你写一篇文章,这篇文章是描述我们学校的美丽风景以及师资力量的。无论大家怎么写,学校的风景还是那些,学校的师资还是那样,而且我们谢了这篇文字,老师也不一定看。

    这个时候,老师可能会给大家一个模版资料(这个就是原型),然后大家就可以抄这个资料(调用clone方法),顺便自己发挥一下(深度克隆-修改),我们的这篇文章就成型了。


    下面给出代码实现:

    package com.luzhiming.prototype; 
    /** 
     * @author strungle  E-mail: 645707787@QQ.com
     * @version 创建时间:2013-6-23 下午10:11:38 
     * 
     * Prototype:设计模式之Prototype (原型)
     */
    public class PrototypeDemo {
    	public static void main(String[] args) throws Exception {
    		Person person = new Person(1,"zhangsan",new HomeWork("学校美丽,师资雄厚"));
    		Person person1= (Person)person.clone();
    		Person person2 = (Person)person.clone();
    		
    		person2.getHomework().setData("我觉得,学校美丽一般,师资一般");
    		
    		
    		System.out.println(person.getHomework().getData());
    		System.out.println(person1.getHomework().getData());
    		System.out.println(person2.getHomework().getData());
    	}
    
    }
    
    class Person implements Cloneable
    {
    	private int age;
    	private String name;
    	private HomeWork homework;
    	
    	public Person(int age, String name, HomeWork homework) {
    		this.age = age;
    		this.name = name;
    		this.homework = homework;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	
    	
    	public HomeWork getHomework() {
    		return homework;
    	}
    	public void setHomework(HomeWork homework) {
    		this.homework = homework;
    	}
    	@Override
    	public Object clone() throws CloneNotSupportedException {
    		Person person = (Person)super.clone();
    		person.setHomework((HomeWork)person.getHomework().clone());
    		return person;
    	}
    }
    
    class HomeWork implements Cloneable
    {
    	private String data;
    
    	public HomeWork(String data) {
    		this.data = data;
    	}
    
    	public String getData() {
    		return data;
    	}
    
    	public void setData(String data) {
    		this.data = data;
    	}
    	
    	@Override
    	public Object clone() throws CloneNotSupportedException {
    		return super.clone();
    	}
    	
    }
    


    大家有什么不是很明白的可以问我。

  • 相关阅读:
    Linux下Oracle client客户端安装
    深度学习的batch_size
    Ubuntu下CUDA8.0卸载
    Numpy 定义矩阵的方法
    python 按照自然数排序遍历文件 python os.listdir sort by natural sorting
    linux 将终端进行换行
    从LeNet到SENet——卷积神经网络回顾
    神经网络权值初始化方法-Xavier
    FaceAlignment blog
    tensorflow模型量化压缩
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3155611.html
Copyright © 2011-2022 走看看