原型模式

2019-03-27 01:13|来源: 网路

package org.apache.solr.test;

public class Prototype implements Cloneable {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Object clone() {
         Object object = null;
        try {
            object=super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();            
        }
        return object;
    }

    public static void main(String[] args) {
        Prototype pro = new Prototype();
        pro.setName("original object");
        Prototype pro1 = (Prototype) pro.clone();
        pro.setName("changed object1");

        System.out.println("original object:" + pro.getName());
        System.out.println("cloned object:" + pro1.getName());
    }

}

 


转自:http://www.cnblogs.com/chenying99/articles/3499551

相关问答

更多
  • java教程:关于Java设计模式关于原型模式(Prototype) IT信息技术http://www.52ij.com/jishu/ 首先需要弄清楚什么叫原型模式,或者说为什么要有原型模式,运用它会给我们带来什么或能解决什么问题?原型模式(Prototype)同抽象工厂模式同属于创建型模式,它主要关注于大量相同或相似对象的创建问题,应用原型模式就是先需要一个原对象,然后通过对原对象进行复制(克隆),来产生一个与原对象相同或相似的新对象。注意这里所说的对象相同不是指复制出来的副本对象与原对象是同一个对象,相 ...
  • 原型模式本身就是用来解决系统中需要创建一个新对象,而要创建的对象和系统中已有对象存在诸多重复的属性和方法,如果再去new一个新的空对象,就需要对新的对象进行赋值初始化操作,这会增加不必要的工作量。 使用克隆的好处就是可以将已有对象的属性和方法直接复制给新的对象。
  • 构造函数和原型是实现类和实例的合理方式之一。 它们并不完全对应于该模型,因此您通常需要选择特定的方案或帮助方法来实现原型方面的类。 ( JS中的类的一些背景 ) 模块模式通常用于命名空间,其中您将有一个实例充当存储来分组相关的功能和对象。 这是一个不同的用例,从什么原型是有益的。 他们不是真的相互竞争; 你可以非常高兴地一起使用(例如在模块中放置一个构造函数,并说出new MyNamespace.MyModule.MyClass(arguments) )。 Constructor-functions and ...
  • 我给了一个答案,现在完全重写了它:) 基本上,MazePrototypeFactory只知道它可以使用的基类。 它不知道任何你将要制作的任何子类,但它仍然应该能够将任何可能的子类放到迷宫中。 该模式基本上确保MazeFactory将得到一个它可以理解的类型的指针Wall,而不是使MazeFactory需要被修改为能够产生所有子类的对象。 MazeFactory是第124页提到的客户端。它不需要了解HasBomb以建立迷宫。 I gave an answer and totally rewrote it no ...
  • 我的50美分: 我相信作者指的是你在符号库中没有类定义的情况,但是你想要实例化对象,并将它们传递给库使用者函数(所以你是内存所有者,共享库是使用者,但您无权访问库中的具体类) 示例(我将从头顶写一个,以强调一个有用的场景,然后我将编写另一个我实际碰到的场景) 拥有一个动态库TextEditorWidgets.dll和你的主应用程序,TextEditorWidget公开了一个抽象原型TEWPrototype,以及一个根据让我们说一个字符串标识符来获取某些原型的工厂方法。 将工厂方法从dll中公开定义为: TE ...
  • 装饰器模式可能是最直接使用的,并且是扩展具体对象功能和/或特性的好方法。 以下是一些阅读材料: Head First Design Patterns - CH3 pdf 仅供参考,夫妻必须拥有学习和参考设计模式,无论您选择何种语言: 1) 头部设计模式 2) 企业应用程序架构的模式 3) 设计模式:可重用面向对象软件的元素 和网站: 1) DoFactory 2) StackOverflow设计模式新手 还有其他一些,我将不得不挖掘它们。 The Decorator Pattern is probably ...
  • 我错过了什么吗? 是。 new function(proto) { 不要使用new 。 new base().eat (data);//This is just to show you can call the base. If needed. 不要使用new 。 你可以在这里创建一个新实例,但是你想要的是从base.prototype获取eat方法并在你的Fish实例上call它。 proto = new Animal() 不要用new ! Fish.prototype = (function(su ...
  • 没有内置任何内容可以为您执行深层克隆。 我相信你可以根据新的RTTI编写一个深层克隆,但我认为这是一个不重要的工作量。 如果您处理的是足够简单的类型,那么它可以正常工作,但是您很容易遇到严重的挑战。 例如,我的头顶上: 一些对象组需要按照特定的顺序创建。 不应该克隆某些类的某些成员,例如引用计数。 你如何识别RTTI? 你如何处理单身人士? 需要设置哪些外部参考? 假设你克隆了一个通常由工厂创建的对象。 如果该工厂对其创建的对象持有引用,那么背后可能会破坏您的设计。 你可以通过定义一个基本的Clone()方 ...
  • 当你有同样的东西,但使用不同的方法来实现它时,接口是很棒的。 用你的例子,假设我们有这样的东西...... public interface ILongRangeWeapon { void Fire(); } 现在,我们假设您有这些课程...... public class Rifle : ILongRangeWeapon { public void Fire() { // Pull the trigger } } public class Nuclear ...
  • 您可以执行与以前完全相同的操作,只需在doSomething方法中执行: doSomething: function () { var instance = this; $('.some-class').each(function () { $(this).click(instance.doClick); }); }, 这种方法与prototype无关,它只是如何使用嵌套函数管理上下文。 因此,当原型(方法)上的函数具有嵌套函数时,如果要在嵌套作用域中访问它 ...