读书笔记--原型模式
来源:互联网 发布:网络教育哪个好 编辑:程序博客网 时间:2024/06/02 19:55
对于编程来说,简单的复制粘贴极有可能造成重复代码的灾难。
每NEW一次,都需要执行一次构造函数,如果构造函数的执行时间很长,那么多次的执行这个初始化操作就实在是太低效了。一般在初始化的信息不发生变化的情况下,克隆是最好的办法。这既隐藏了对象创建的细节,又对性能是大大的提高。
原型模式等于是不用重新初始化对象,而是动态地获得对象运行时的状态。
浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。把要复制的对象所引用的对象都复制一遍。
原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式其实就是从一个对象再创建另外一个可定制的对象。而且不需知道任何创建的细节。
abstract class Prototype
{
private String id;
public Prototype(String id)
{
this.id = id;
}
public String getId(){
return id;
}
public abstract Prototype Clone();
}
具体原型类
class ConcretePrototype1 extends Prototype{
public ConcretePrototype1(String id)
{
}
//创建当前对象的浅表副本。方法是创建一个新对象,然后将当前对象的非静态字段
复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,
则复制引用但不复制引用的对象。因此,原始对象及其副本引用同一对象。
public Prototype Clone(){
return (Prototype)this.MemberwiseClone();
}
}
//客户端代码
public static void Main(String args[]){
ConcretePrototype1 p1 = new ConcretePrototype1("I");
ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
System.err.println("==",c1.id);
}
由于克隆实在是太常用了,所以提供了ICloneable接口,其中就是唯一的一个方法Clone(),这样就只需要实现这个接口就可以完成原型模式了。
例子:简历的深层复制
代码结构图:
//工作经历类
class WorkExperience implements ICloneable
{
private String workDate;
//省略对应的get和set方法
private String company;
//省略对应的get和set方法
public Object Clone()
{
return (Object)this.MemberwiseClone();
}
}
//简历类
class Resume implements ICloneable
{
private String name;
private String sex;
private String age;
private WorkExperience work;
public Resume(String name)
{
this.name = name;
work = new WorkExperience();
}
private Resume(WorkExperience work)
{
//提供Clone方法调用的私有构造函数,以便克隆“工作经历”的数据
this.work = (WorkExperience)work.Clone();
}
//设置个人信息
public void SetPersonalInfo(String sex,String age)
{
this.sex = sex;
this.age = age;
}
//设置工作经历
public void SetWorkExperience(String workDate,String company)
{
work.WorkDate = workDate;
work.Company = company;
}
//显示
public void Display()
{
System.err.println("name:"+name+";sex:"+sex+";age:"+age);
}
public Object Clone()
{
//调用私有的构造方法,让“工作经历”克隆完成,然后再给这个“简历”对象的相关字段赋值,最终返回一个深复制的简历对象
Resume obj = new Resume(this.work);
obj.name = this.name;
obj.sex = this.sex;
obj.age = this.age;
return obj;
}
}
数据集对象DataSet,它就有Clone()方法和Copy方法,Clone()方法用来复制DataSet的结构,但不复制DataSet的数据,实现了原型模式的浅复制。Copy()方法不但复制结构,也复制数据,其实就是实现了原型模式的深复制。
- 读书笔记7:原型模式
- 读书笔记7:原型模式
- 读书笔记--原型模式
- 设计模式读书笔记-----原型模式
- 设计模式读书笔记之原型模式(Prototype)
- 设计模式读书笔记之原型模式(Prototype)
- 7.java设计模式(读书笔记)原型模式
- 大话设计模式读书笔记之原型模式
- ios设计模式读书笔记----Prototype(原型)
- 设计模式读书笔记:Prototype(原型)
- Java与模式(阎宏著)之原型模式读书笔记
- 大话设计模式读书笔记(七) 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- Eclipse中注释模板设置
- 如何成为云计算领域的专家
- JAVA使用Marvin在图片中搜索图片
- 白屏时间,domc,整页时间,首屏时间
- 重载 覆盖 隐藏
- 读书笔记--原型模式
- 法制在线 康姿百德被诬陷坑骗消费者
- Git 远程仓库
- JQuery坑,说说哪些大家都踩过的坑
- 分别使用c、shell语言实现文件内容合并 -- 2014百度面试题目
- 导入LitJson.dll文件到Unity的Plugin目录下,判断Json对象有无某个key的方法
- KNN算法
- Curator之Master/Leader选举注意事项
- 小米手机加载assests目录下的html文件加载不出来的问题