- 浏览: 25643 次
- 性别:
- 来自: 上海
文章分类
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
public interface Prototype {
public Prototype clone();
}
public class ConcretePrototype1 implements Prototype {
public Prototype clone() {
Prototype prototype = new ConcretePrototype1();
return prototype;
}
}
public class ConcretePrototype2 implements Prototype {
public Prototype clone() {
Prototype prototype = new ConcretePrototype2();
return prototype;
}
}
客户端:
public class Client {
private Prototype prototype;
public Client(Prototype prototype) {
this.prototype = prototype;
}
public void operation() {
Prototype newPrototype = prototype.clone();
}
}
需要克隆功能的类,只需要实现Cloneable接口。
super.clone():创建当前对象的浅表副本。方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。
如果字段是值类型的,则对该字段执行逐位复制。
如果字段是引用类型的,则复制引用但不复制引用的对象;因此,原始对象及其副本引用同一对象。
一般在初始化的信息不发生变化的情况下,克隆是最好的办法。
浅复制(浅度克隆):被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深复制(深度克隆):把引用对象的变量指向复制过的新对象而不是原有的被引用的对象。
数据集对象DataSet,它的clone()方法用来复制DataSet的结构,但不复制DataSet的数据。
obj.setProduct((Product)this.product.clone());
最大的缺点是每个原型的子类都必须实现clone的操作,尤其在包含引用类型的对象时,clone方法会比较麻烦,必须要能够递归地让所有的相关对象都要正确地实现克隆。
public interface Prototype {
public Prototype clone();
}
public class ConcretePrototype1 implements Prototype {
public Prototype clone() {
Prototype prototype = new ConcretePrototype1();
return prototype;
}
}
public class ConcretePrototype2 implements Prototype {
public Prototype clone() {
Prototype prototype = new ConcretePrototype2();
return prototype;
}
}
客户端:
public class Client {
private Prototype prototype;
public Client(Prototype prototype) {
this.prototype = prototype;
}
public void operation() {
Prototype newPrototype = prototype.clone();
}
}
需要克隆功能的类,只需要实现Cloneable接口。
super.clone():创建当前对象的浅表副本。方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。
如果字段是值类型的,则对该字段执行逐位复制。
如果字段是引用类型的,则复制引用但不复制引用的对象;因此,原始对象及其副本引用同一对象。
一般在初始化的信息不发生变化的情况下,克隆是最好的办法。
浅复制(浅度克隆):被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深复制(深度克隆):把引用对象的变量指向复制过的新对象而不是原有的被引用的对象。
数据集对象DataSet,它的clone()方法用来复制DataSet的结构,但不复制DataSet的数据。
obj.setProduct((Product)this.product.clone());
最大的缺点是每个原型的子类都必须实现clone的操作,尤其在包含引用类型的对象时,clone方法会比较麻烦,必须要能够递归地让所有的相关对象都要正确地实现克隆。
发表评论
-
访问者模式Visitor预留通路,回调实现
2014-03-13 16:55 379表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各 ... -
桥接模式Bridge分离抽象和实现
2014-03-13 16:55 491将抽象部分与它的实现部分分离,使它们都可以独立地变化。 桥接 ... -
职责链模式Chain of Responsibility分离职责,动态组合
2014-03-12 17:25 341使多个对象都有机会处 ... -
装饰模式Decorator动态组合
2014-03-12 17:00 277动态地给一个对象添加 ... -
解释器模式Interpreters分离实现,解释执行
2014-03-12 16:27 295给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解 ... -
享元模式Flyweight分离与共享
2014-03-12 13:20 301运用共享技术有效地支持大量细粒度的对象。 安全实体:就是被系 ... -
备忘录模式Memento保存和回复内部状态
2014-03-11 17:47 433在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外 ... -
状态模式State根据状态来分离和选择行为
2014-03-11 17:20 399允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改 ... -
策略模式Strategy分离算法,选择实现
2014-03-11 15:26 418迪米特法则:LoD,最少知识原则。 如果两个类不必彼此直接通信 ... -
模板方法模式Templete Method 固定算法骨架
2014-03-11 11:15 537定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法 ... -
组合模式Composite统一叶子对象和组合对象
2014-03-07 18:18 308将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使 ... -
迭代器模式Iterator 控制访问聚合对象中的元素
2014-03-07 17:57 410提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该 ... -
命令模式Command 封装请求
2014-03-07 16:26 381将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数 ... -
观察者模式Observer订阅模式-触发联动
2014-03-07 11:19 383定义对象间的一种一对 ... -
代理模式Proxy 为别人做嫁衣(控制对象访问)
2014-03-06 00:39 331为其他对象提供一种代理以控罪对这个对象的访问。 代理大致被分为 ... -
中介者模式Mediator 封装交互
2014-03-06 00:19 370用一个中介对象来封装 ... -
生成器模式Builder 分离整体构建算法和部件构造
2014-03-06 00:19 307将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建 ... -
抽象工厂模式 Abstract Factory 选择产品簇的实现
2014-03-06 00:20 417工厂方法模式或简单工 ... -
工厂方法模式Factory Method延迟到子类来选择实现
2014-03-05 18:12 951定义一个用于创建对象 ... -
单例模式Singleton某个类只需要一个类实例
2014-03-05 16:46 426保证一个类只有一个实例,并提供一个访问它的全局访问点。 懒汉 ...
相关推荐
**原型模式(Prototype)**是软件设计模式中的一种,它属于创建型模式,主要用于简化对象的创建过程,通过复制已有对象来生成新对象,避免了重复的构造过程,提高了代码的效率和可维护性。在Java、C#等面向对象语言...
**原型模式(Prototype Pattern)**是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,而不是通过构造函数。在某些情况下,当创建新对象的成本非常高时(例如,对象需要大量的初始化操作或者从...
原型模式(Prototype Pattern)是一种创建型设计模式,允许通过复制现有对象来创建新对象,而不是通过类构造器。这种模式常用于需要频繁创建相似对象的场景,能够提高性能并减少内存使用。 原型模式的组成 原型接口...
在软件设计中,原型模式是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,避免了重复的构造过程,提高了代码的效率和可维护性。原型模式的核心思想是利用对象的克隆功能来实现新对象的创建,...
### 原型模式 Prototype Pattern #### 概述 原型模式是一种创建型设计模式,它允许用户通过复制现有的实例来创建新的对象,而不是通过传统的构造器来创建对象。这种模式适用于那些创建对象的成本较高,或者当对象...
原型模式(Prototype Pattern)是其中一种行为设计模式,主要用于对象创建。它通过复制已有对象来创建新对象,而不是通过传统的构造函数来创建。在Java中,原型模式可以有效地提高性能,特别是在创建复杂对象时。 #...
"原型"(Prototype)模式是其中的一种行为设计模式,它主要用于简化对象的创建过程,通过复制已有对象来生成新对象,而非每次都创建一个新的实例。这种模式在需要大量相似对象时尤其有效,可以避免重复代码并提高...
原型模式(Prototype)是一种软件设计模式,主要用于简化创建对象的过程,尤其当对象的构造过程复杂时。在C#中,我们可以利用接口或者继承来实现这一模式。本案例将深入探讨如何在C#环境中运用原型模式。 首先,...
原型模式是设计模式中的一种,它是Java 23种经典设计模式之一,主要用来提高对象创建的效率。在原型模式中,我们通过复制或克隆一个已经存在的对象来创建新的对象,而不是通过构造函数来创建。这种方法尤其适用于当...
原型模式的概念源于孙悟空的“拔毛变小猴”的神话故事,这种能力在软件开发中被抽象为复制一个对象并生成与原对象相同的新对象。原型模式定义如下:通过原型实例指定待创建对象的类型,并通过复制原型来创建新的对象...
原型模式是一种创建型设计模式,它允许我们创建对象的克隆,而无需知道具体的实现细节。在软件工程中,当我们需要创建多个相似的对象时,使用原型模式可以大大提高效率,避免了每次都去创建新的对象。这种模式是基于...
原型模式是一种设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在原型模式中,一个对象可以在不创建新实例的情况下进行克隆,从而产生一个与原对象相同或几乎相同的新对象。这种模式主要涉及到`拷贝...
原型模式(Prototype)是一种创建型设计模式,它的核心思想是通过复制已有对象来创建新对象,以减少重复的构造过程,提高代码效率。在PHP中,原型模式通常通过对象的克隆(clone)操作来实现。 1. **概述** 原型...
**原型模式**(Prototype Pattern)是一种创建型设计模式,它通过复制一个现有的实例来创建新对象,而不是通过传统的构造函数进行创建。这种模式的关键在于利用现有的实例作为模板,通过复制这个模板对象来生成新的...
原型模式是其中一种经典的设计模式,它属于创建型模式,主要应用于对象复制或克隆场景。在这个实验六:“原型模式.rar”中,我们将深入理解并实践如何在Java中实现原型模式。 首先,原型模式的核心思想是通过拷贝已...
例如,可以使用原型模式快速生成具有基本特性的对象,然后用装饰器模式添加特定的业务逻辑,最后通过享元模式减少内存消耗。同时,理解并熟练运用这些模式也是成为一名优秀IT专业人员的必备技能。
原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而无需知道具体创建过程的细节。这种模式的核心在于,它提供了一种更灵活的创建对象的方式,避免了复杂的构造过程...
1. **原型(Prototype)**: 在原型模式中,一个对象可以被克隆以创建一个新的对象。这个原始的对象就被称为原型。 2. **深拷贝与浅拷贝**: Java中的clone()方法默认执行的是浅拷贝,即只复制对象本身,不复制对象...
原型模式(Prototype Mode)是软件设计模式中的一种,它的主要思想是通过复制已有对象来创建新的对象,从而减少创建新对象的成本。这种模式在实际应用中尤其适用于对象创建过程复杂或者资源消耗较大的情况。 在面向...