设计模式:Prototype 原型模式 - 同学你抄过别人的作业么?-clone()方法的使用

来源:互联网 发布:centos安装火狐浏览器 编辑:程序博客网 时间:2024/04/29 09:24

原型模式:

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

使用原型模式的好处:

好处是什么呢?当我们需要多次重复的创建一个类的示例的时候,我们可以使用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;}@Overridepublic 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;}@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}}

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