设计模式:Prototype 原型模式 - 同学你抄过别人的作业么?-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()方法的使用的更多相关文章
- 一天一个设计模式——Prototype 原型模式
一.模式说明 看了比较多的资料,对原型模式写的比较复杂,个人的理解就是模型复制,根据现有的类来直接创建新的类,而不是调用类的构造函数. 那为什么不直接调用new方法来创建类的实例呢,主要一个原因是如果 ...
- C++设计模式-Prototype原型模式
作用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone), Clone()实现和具体的语言相关,在C+ ...
- 5.设计模式----prototype原型模式
原型模式:做到是原型,那肯定是自己本身才是原型,原型模式属于对象的创建模式. 关于原型模式的实现方式分2种: (1)简单形式.(2)登记形式,这两种表现形式仅仅是原型模式的不同实现. package ...
- c# 24种设计模式5原型模式(Prototype)
前言 原型模式其实C# Object中已经提供了一个Clone( )方法,平时很少用到,最近读Retrofit源码时候看到有这种使用方式. 定义 原型模式就是在系统clone()标记的基础上,对Clo ...
- 设计模式_11_原型模式(prototype)深拷贝、浅拷贝
设计模式_11_原型模式(prototype) 浅拷贝: package designPatternOf23; /** * 定义:用原型实例,指定创建对象的种类,并通过拷贝这些原型创建新的对象 * P ...
- 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)
原文:乐在其中设计模式(C#) - 原型模式(Prototype Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:weba ...
- C#设计模式之六原型模式(Prototype)【创建型】
一.引言 在开始今天的文章之前先说明一点,欢迎大家来指正.很多人说原型设计模式会节省机器内存,他们说是拷贝出来的对象,这些对象其实都是原型的复制,不会使用内存.我认为这是不对的,因为拷贝出来的每一个对 ...
- C#设计模式之五原型模式(Prototype Pattern)【创建型】
一.引言 在开始今天的文章之前先说明一点,欢迎大家来指正.很多人说原型设计模式会节省机器内存,他们说是拷贝出来的对象,这些对象其实都是原型的复制,不会使用内存.我认为这是不对的,因为拷贝出来的每一个对 ...
- C#设计模式(6)——原型模式(Prototype Pattern) C# 深浅复制 MemberwiseClone
C#设计模式(6)——原型模式(Prototype Pattern) 一.引言 在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创 ...
随机推荐
- php 链接中加参数传递
原文:php 链接中加参数传递 php链接中加参数是在源链接中加"?",问号之后就可以跟参数列表,para1=value1¶2=value2¶3=v ...
- [Node.js框架] 为什么要开发 Codekart 框架
两年前,在被php的$符号和字符串处理折磨得半夜骂娘之后,我义无反顾地决定:珍爱生命,远离php. 之后一直在寻找一门“完美的语言”,先后接触了Lisp.python.java.Ruby.Lisp几乎 ...
- WebStorm荣获InfoWorld2014年度科技奖
InfoWorld年度科技奖是每年一月由InfoWorld评论家对过去一年的表现最好的信息产品的褒奖.产品包括硬件.软件.开发工具和云服务等. InfoWorld2014年度科技奖,包括35个获奖产品 ...
- 我的vi/vim配置文件
位于/etc/vim/的vimrc " All system-wide defaults are set in $VIMRUNTIME/debian.vim and sourced by & ...
- 《Visual Studio Magazine》2013年读者选择奖—界面框架类
好消息!2013 Visual Studio Magazine读者选择奖已经正式揭晓了!据了解,截至今年此奖项已经评选了21次,非常值得.NET开发人员信赖和参考.此次评选共有400多个产品角逐28个 ...
- JQuery Smart UI
JQuery Smart UI 个人开发的一套使用htm+js的开发框架 SmartUI2.0后续声明 摘要: 感谢很多朋友关注,因为今年一直在另外一个公司做顾问,网络环境管制相当严格,所以一直没有更 ...
- jquery 触屏滑动+定时滚动
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- 算法回顾--N皇后问题简单回顾
前言 最近学习的过程中,不知道哪门子的思维发散,突然又遇见皇后问题了,于是乎老调重弹,心里琢磨,虽然思路大家都容易懂,哪怕是最简单的野蛮回溯法,说着简单,但是如果非得编码实现?我可以一次性写出来OK的 ...
- .net图片压缩
1.png很难进行压缩,一般压缩时间较长. 2.jpg图片压缩方法: #region 图片压缩[之压缩jpg] public static void JpgImgZip(Image img,strin ...
- 使用ServletConfig获得web.xml资源中的参数
适用:一些不需要再Servlet文件中初始化的可以使用,例如:数据库用户名和密码 //Servlet文件 //实例化ServletConfig对象 ServletConfig servletConf ...