原型模型

1、原型结构图

代码

package com.sxt.bean;

class Prototype implements Cloneable {
    public Prototype clone(){
        Prototype prototype = null;
        try{
            prototype = (Prototype)super.clone();
        }catch(CloneNotSupportedException e){
            e.printStackTrace();
        }
        return prototype;
    }
}    

class ConcretePrototype extends Prototype{
    public void show(){
        System.out.println("原型模式实现类");
    }
}    

public class Client {
    public static void main(String[] args){
        ConcretePrototype cp = new ConcretePrototype();
        long start = System.currentTimeMillis();
        for(int i=0; i< 10; i++){
            ConcretePrototype clonecp = (ConcretePrototype)cp.clone();
            System.out.println(clonecp==cp);
            clonecp.show();
        }
        System.out.println(System.currentTimeMillis()-start);
    }
}

3、谈谈浅复制和深复制

浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍指向原来的对象

深复制:把原来引用对象的变量指向复制过来的新对象,而不是原来被原有的被引用的对象

深拷贝和浅拷贝,会发生深拷贝的是java 的 8种基本数据类型和他们的封装类,至于String这个类型需要注意,它是引用数据类型,所以是浅拷贝

时间: 2024-12-12 04:51:43

原型模型的相关文章

快速原型模型

快速原型模型(Rapid Prototype Model) 快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求.通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么:第二步则在第一步的基础上开发客户满意的软件产品. 显然,快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果. 快速原型的关键在于尽可能快速地建造出软件原型,一旦确定了客户的真正需求,所建造的原型将被丢

软件开发过程-------瀑布模型、原型模型、螺旋模型、敏捷开发模型

瀑布模型: 计划 → 需求分析 →  设计 →  编码 →  测试 →  运行维护 特点:①软件开发的各项活动严格按照线性方式进行.       ②当前活动接受上一项活动的工作结果.           ③当前活动的工作结果需要进行验证. 缺点:①由于开发模型是线性的,增加了开发的风险.           ②早期的错误可能要等到开发后期的阶段才能发现. 原型模型: 客户与开发公司紧密联系,开发周期长.开发会受到需求变更的影响. 特征:①实现客户与系统的交互. ② 进一步细化待开发软件需求. ③

软件工程之快速原型模型

引入快速原型模型的原因: 如果用传统的方法开发一个系统,在初期需求方面的工作时,无论和用户做如何详细的沟通,用户都能难对自己的需求表达准确.全面,因为用户和开发团队双方的知识领域有很大差异. 开发人员懂技术,业务人员了解业务和客户层面,导致沟通需求方面时存在很多问题,理解不一致. 从而导致已经完成大半的软件产品极可能被返工,加大了软件产品开发的时间和成本.而时间和成本是软件开发中最重要的,所以需要引入可以克服这些缺点的快速原型模型. 快速原型模型: 结构: 结构优点:在结构上看,快速原型模型是不

笔记:ECMA 工厂模型、构造模型、原型模型 (一)

/**************面向对象模型 创建对象*********************//*工厂模式*/ function CreateObj (name,sex,sayName){ var obj = new Object(); obj.name = name; obj.sex = sex; obj.sayName = function(){ alert(this.name); } return obj; } var person = CreateObj("工厂模型createName

JS面向对象——组合使用构造函数模型与原型模型

该模型为创建自定义类型最常用的方式. <!DOCTYPE html> <html> <head> <title>组合使用构造函数模型和原型模型</title> <script type="text/javascript"> //组合使用构造函数模型和原型模型——构造函数模型用于定义实例属性,原型模型用于定义方法和共享属性. function Student(name,age,sex){ this.name=name

软件开发生命周期模型 瀑布模型、增量模型、原型模型、螺旋模型、喷泉模型总结

在校期间学习过这些模型,现在来复习一下. 瀑布模型/改进的瀑布模型 虽然瀑布模型仍然存在很多的问题有待解决,但瀑布模型仍然是最基本的和最效的一种可供选择的软件开发生命周期模型.瀑布模型要求软件开发严格按照需求 ->分析->设计->编码->测试的阶段进行,每一个阶段都可以定义明确的产出物和验证准则.瀑布模型在每一个阶段完成后都可以 组织相关的评审和验证,只有在评审通过后才能够进入到下一个阶段. 由于需要对每一个阶段进行验证,瀑布模型要求每一个阶段都有明确的文档产出,对于严格的瀑布模型

设计模式学习(四) 原型模型

使用场景 -- 通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式 -- 就是java中的克隆技术,以某个对象为原型复制出新的对象 ,显然,新的对象具备原型对象的特点 优势: 效率高(直接克隆,避免了重新执行构造的过程步骤). 克隆类似于new,但是不同于new.new创建新的对象属性采用的是默认值.克隆出的对象的属性值完全和原型对象相同,并且克隆出的新对象改变不会影响原型对象.然后,再修改克隆对象的值 原型模式实现: -- Cloneable接口和clone方法 --

笔记:ECMA 工厂模型、构造模型、原型模型 (二)

如上图: 实例对象 原型对象 构造函数之间的关系 我们都知道,每添加一个Function,都会自带一个prototype属性指针,指向我们的实例对象! 每创建一个原型对象,默认会获得一个constructor(构造函数)属性,这个属性会指向prototype所在函数的指针 那么,三者之间转换关系呢,如上图可以知道 实例对象的prototype是原型对象 构造函数的prototype是原型对象 原型对象的constructor是构造函数 创建一个实力对象 var newObj = new Obje

Prototype原型模型

#include<iostream> using namespace std; //从一个对象再创建另一个可定制的对象,无需知道任何的细节,并能提高创建的性能. class Base { public: virtual void Printf() = 0; virtual Base* Clone() { return 0; } private: }; class Son : public Base { public: Son(){} void Printf() { cout <<