设计模式:Prototype 原型模式 - 同学你抄过别人的作业么?-clone()方法的使用
2013-06-24 20:46
691 查看
原型模式:
通过某个类的实例来创建对象
使用原型模式的好处:
好处是什么呢?当我们需要多次重复的创建一个类的示例的时候,我们可以使用new但是,new不仅仅耗费内存而且,如果new 某个类的构造方法中有多个参数,那么岂不是相当的麻烦?
联想:
我们可以把原型模式想象成同学们平时差别人作业(当然,我并不赞同大家抄别人作业),如果写某个科目的作业的时候,大家的作业可以有很大程度的相同。
比如:
让你写一篇文章,这篇文章是描述我们学校的美丽风景以及师资力量的。无论大家怎么写,学校的风景还是那些,学校的师资还是那样,而且我们谢了这篇文字,老师也不一定看。
这个时候,老师可能会给大家一个模版资料(这个就是原型),然后大家就可以抄这个资料(调用clone方法),顺便自己发挥一下(深度克隆-修改),我们的这篇文章就成型了。
下面给出代码实现:
大家有什么不是很明白的可以问我。
通过某个类的实例来创建对象
使用原型模式的好处:
好处是什么呢?当我们需要多次重复的创建一个类的示例的时候,我们可以使用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(); } }
大家有什么不是很明白的可以问我。
相关文章推荐
- 设计模式:Prototype 原型模式 - 同学你抄过别人的作业么?-clone()方法的使用
- Rhyme/Java 设计模式之原型模式prototype通过clone方法和反序列化实现深复制
- 克隆复制可使用原型( Prototype)设计模式
- 设计模式之 原型模式详解(clone方法源码的简单剖析)
- 设计模式之 原型(Prototype)模式(使用智能指针避免浅拷贝时内存泄露)
- 五星-原型模式常使用于以下场景--而JAVA中的任何类只要实现了Cloneable标识接口,就可以使用clone方法来进行对象的拷贝
- 解析设计模式中的Prototype原型模式及在C++中的使用
- C#设计模式(6)——原型模式(Prototype Pattern)
- C++设计模式-Prototype原型模式
- Java技术_每天掌握一种设计模式(006)_使用场景及简单实例(创建型:原型模式)
- java23种设计模式之原型模式(Prototype)
- JAVA设计模式 — 原型模式(Prototype)
- 设计模式——行为型之使用模板方法(Template Method Pattern)模式尽量减少重复相似的代码段(一)
- 设计模式-原型模式(Prototype)
- 设计模式之Prototype——作业篇
- Object对象clone方法总结+原型模式(笔记)
- [设计模式整理笔记 七] 原型模式(ProtoType)
- 设计模式之 原型模式(prototype)(C++实现 深拷贝 + 浅拷贝版本[bug])
- 【设计模式】—— 原型模式Prototype
- [设计模式](四):建造者模式(Builder)与原型模式(Prototype)[含Kotlin深克隆实例代码]