原型模式:

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

使用原型模式的好处:

好处是什么呢?当我们需要多次重复的创建一个类的示例的时候,我们可以使用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()方法的使用的更多相关文章

  1. 一天一个设计模式——Prototype 原型模式

    一.模式说明 看了比较多的资料,对原型模式写的比较复杂,个人的理解就是模型复制,根据现有的类来直接创建新的类,而不是调用类的构造函数. 那为什么不直接调用new方法来创建类的实例呢,主要一个原因是如果 ...

  2. C++设计模式-Prototype原型模式

    作用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone), Clone()实现和具体的语言相关,在C+ ...

  3. 5.设计模式----prototype原型模式

    原型模式:做到是原型,那肯定是自己本身才是原型,原型模式属于对象的创建模式. 关于原型模式的实现方式分2种: (1)简单形式.(2)登记形式,这两种表现形式仅仅是原型模式的不同实现. package ...

  4. c# 24种设计模式5原型模式(Prototype)

    前言 原型模式其实C# Object中已经提供了一个Clone( )方法,平时很少用到,最近读Retrofit源码时候看到有这种使用方式. 定义 原型模式就是在系统clone()标记的基础上,对Clo ...

  5. 设计模式_11_原型模式(prototype)深拷贝、浅拷贝

    设计模式_11_原型模式(prototype) 浅拷贝: package designPatternOf23; /** * 定义:用原型实例,指定创建对象的种类,并通过拷贝这些原型创建新的对象 * P ...

  6. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    原文:乐在其中设计模式(C#) - 原型模式(Prototype Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:weba ...

  7. C#设计模式之六原型模式(Prototype)【创建型】

    一.引言 在开始今天的文章之前先说明一点,欢迎大家来指正.很多人说原型设计模式会节省机器内存,他们说是拷贝出来的对象,这些对象其实都是原型的复制,不会使用内存.我认为这是不对的,因为拷贝出来的每一个对 ...

  8. C#设计模式之五原型模式(Prototype Pattern)【创建型】

    一.引言 在开始今天的文章之前先说明一点,欢迎大家来指正.很多人说原型设计模式会节省机器内存,他们说是拷贝出来的对象,这些对象其实都是原型的复制,不会使用内存.我认为这是不对的,因为拷贝出来的每一个对 ...

  9. C#设计模式(6)——原型模式(Prototype Pattern) C# 深浅复制 MemberwiseClone

    C#设计模式(6)——原型模式(Prototype Pattern)   一.引言 在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创 ...

随机推荐

  1. effective C++ 札记 规定17 在单独的陈述newed对象插入智能指针

    // Test.cpp : 自定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include &l ...

  2. Jquery AJAX POST与GET之间的区别

    1:GET访问 浏览器 认为 是等幂的就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配]所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果 ...

  3. SqlServer-COMPUTE BY

    原文:SqlServer-COMPUTE BY COMPUTE BY子句可以通过同一个select语句即查看明细行,又查看汇总行.可以计算子组的汇总值,也可以计算整个结果集的汇总值 COMPUTE 子 ...

  4. SSMS2008插件开发(4)--自定义菜单

    原文:SSMS2008插件开发(4)--自定义菜单 打开上次的项目MySSMSAddin中的Connect类,发现该类继于了两个接口:IDTExtensibility2和IDTCommandTarge ...

  5. CSS控制文本超出后隐藏并用省略号代替

    一.仅定义text-overflow:ellipsis; 不能实现省略号效果. 二.定义text-overflow:ellipsis; white-space:nowrap; 同样不能实现省略号效果. ...

  6. Javascript多线程引擎(十)---Web服务器

     Javascript多线程引擎(十)---Web服务器 经过一天的努力, 引擎可以支持web服务的功能了并且支持UTF-8的编码, 具有对HTTP参数的解析,状态码的配置, 响应报文的输出等. 提供 ...

  7. ORACLE总结系列1--network文件夹里的admin的三个文件信息

    sqlnet.ora 作用类似于linux或者其他unix的 nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串(connect descriptor) 假如sqln ...

  8. AjaxPro2

    AjaxPro2完整入门教程   一.目录 简单类型数据传送(介绍缓存,访问Session等) 表类型数据传送 数组类型数据传送(包含自定义类型数据) 二.环境搭建 1.这里本人用的是VS2012. ...

  9. Memcached安装配置最大使用内存

    Memcached安装配置最大使用内存 项目做了很多,虽然用memcached的项目也有很多.但是没有太关注安装memcached细节问题 最近做了一个项目,把很多东西都放到memcached缓存中, ...

  10. Day2:T1搜索 T2最小生成树

    T1:广搜+判断矩形 注:如何判断搜的是否为矩形: 在广搜的时候,记录下边界的坐标,然后枚举一遍过去,如果搜到"."就是牛群,否则就是房间 瞥了一眼ccy的做法,据说是floodf ...