原型设计

设计模式-02原型模式(Prototype)

吃可爱长大的小学妹 提交于 2020-01-20 13:58:39
1.模式动机 在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。 简单粗暴的理解就是:创建一个对象当做模板,然后利用这个模板使用 clone 方法快速的创建一个新的对象。 2.模式定义 原型模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。用这种方式创建对象非常高效,根本无须知道对象创建的细节。 3.模式代码 使用 Java 中提供的 clone 方法实现原型模式非常简单。但是要注意 浅克隆 和 深克隆 ,这里就不具体说这两个名词了。 import lombok.Getter; import lombok.Setter; import lombok.ToString; @Getter @Setter @ToString public class User implements Cloneable{ private String name; public User(String name) { this.name = name; } @Override protected User clone() throws CloneNotSupportedException { System.out

总结继承的几种方式

♀尐吖头ヾ 提交于 2020-01-19 01:02:21
简单总结继承的几种方式 JavaScript作为一门弱类型的语言,本着精简的原则,它取消了类的概念,只有对象的概念, 更是有万物皆对象的说法。在基于类的面向对象方式中,对象(object)依靠类(class)来产生。 而在基于原型的面向对象方式中,对象(object)则是依靠构造器(constructor) 利用 原型(prototype) 构造出来的。而JavaScript语言正是如此,它是通过一种叫做原型(prototype)的方式来实现面向对象编程的。 它和其他的面向对象类编程语言一样,只是它的实现方式不同而已,或者说他们采用了不同的面向对象设计哲学。 那么下面就让我们来简单总结一下继承的几种方式: 扩展原型对象实现继承 构造函数有一个 prototype 属性,指向的就是原型对象,通过给原型对象添加属性和方法,让构造函数的实例 都可以访问到,从而实现继承 function Animal(name,color,say){ this.name = name; this.color = color; this.say = function(){ console.log('喵喵喵'); } } var cat = new Animal('cat','white'); // 如果给Animal的prototype属性上添加个 cry 方法 ,那么实例对象 cat将也会有 cry方法

原型设计与功能规格说明书

此生再无相见时 提交于 2020-01-16 19:25:08
原型设计与功能规格说明书 学号623 学号319 作业链接 模型链接 原型模型设计工具:墨刀 1.引言 1.1编写目的 本说明书的目的是介绍算术1.0这款app,便于小学老师和学生能够快速上手这款app,以下叙述将结合文字描述,用户场景分析,界面原型等来描述算术1.0的功能。本说明书的预期读者有在校学生、教师、以及学生家长 1.2背景 算术1.0是结合老师的需求以及学生做题的要求而设计。 面向用户:小学教师和学生 产品涉及范围:小学一到六年级的题目试卷 1.3参考资料 《构建之法》(第8,10章),邹欣 2.总体描述 2.1设计背景 阿超设计了一个可用的出题项目,打印出很多分不同的题目,学生做了,效果不错。教导主任知道了也想要类似的程序,让全校学生都能用,为了学生们能够更好的学习,提出了好些要求 2.2设计意图 如今是信息化的时代,应当尽量利用程序来帮助我们简化很多繁杂的问题。小学的考试题目繁琐多样化,但是却离不开加减乘除的运用。所以为了满足老师们的需求,以及吸引学生们的学习兴趣,更好的提高学生们的学习成绩,最终采用开发这款app的形式来呈现学生在线考试做题 2.3用户场景分析 这款app主要面向两类用户: 在app上进行在线考试,浏览考题,收藏题目的小学生 对学生考过的题目进行批阅,控制参数以及数量出题的老师 用户场景 本说明书主要列了两类典型用户: 1.三年级2班张三

java原型设计模式

那年仲夏 提交于 2020-01-15 04:42:44
原型模式的思想:将一个对象作为原型,对其进行复制,克隆,产生一个和原对象类似的新对象。 由上可见,一个原型类,只需要实现cloneable接口,复写clone方法。 java中的克隆,有两种:深浅之分,具体可看http://blog.csdn.net/zhangjg_blog/article/details/18369201/ 首先是浅复制:对基本类型重新开辟空间,对引用类型,依旧指向原对象所指向的 public class Prototype implements Cloneable{ public Objec clone()throws CloneNotSupportedException{ Prototype proto = (Prototype)super.clone(); return proto; } } 再看深复制:复制该对象,基本类型,引用类型都是重新开辟空间. 深复制需要采用流的形式读入当前对象的二进制输入,再写出二进制数据对应的对象。 关于输入输出,看http://blog.csdn.net/zsw12013/article/details/6534619 public class Protopyte implements Cloneable,Serializable{ private String string; public Object deepClone

设计模式培训之六:原型模式

白昼怎懂夜的黑 提交于 2020-01-15 04:42:17
查看文章索引请通过 http://www.cnblogs.com/seesea125/archive/2012/04/17/2453256.html 一、什么是原型模式? 原型模式:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象 原型模式(Prototype结构图) 原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。 二、原型模式代码实现: abstract class prototype { private string id; public prototype(string id) { this.id = id; } public string Id { get { return id; } set { id = value; } } public abstract prototype Clone();//抽象的关键就是这个Clone()这个方法. } class ConcretePrototype1:prototype { public ConcretePrototype1(string id) : base(id) { } public override prototype Clone() { return (prototype)this.MemberwiseClone();//创建当前对象的浅表副本。方法是创建一个新对象

JS中prototype,js原型扩展

前提是你 提交于 2020-01-15 02:11:00
作者:轩脉刃(yjf512) 出处:( http://www.cnblogs.com/yjf512/ ) 版权声明:本文的版权归作者与博客园共有。欢迎转载阅读,转载时须注明本文的详细链接。 原文 http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展。我们称B的原型为A。 2 javascript的方法可以分为三类: a 类方法 b 对象方法 c 原型方法 例子: function People(name) { this .name = name; // 对象方法 this .Introduce = function (){ alert( " My name is " + this .name); } } // 类方法 People.Run = function (){ alert( " I can run " ); } // 原型方法 People.prototype.IntroduceChinese = function (){ alert( " 我的名字是 " +

创建型设计模式(4):原型模式

和自甴很熟 提交于 2020-01-14 23:45:45
原型模式 1.复制引用、复制对象、浅拷贝和深拷贝 复制引用 复制对象 浅拷贝和深拷贝 2.代码实现 简单深拷贝 是否做到完全深拷贝 真正深拷贝 3.通过序列化和反序列化实现深拷贝 4.使用场景 5.优缺点 类和对象的关系好比模具和构件的关系,对象总是通过构造方法从类中创建的。 但是某些场景下是不允许类的调用者直接调用构造函数,也就说对象未必需要从类中衍生出来,现实生活中存在太多案例是通过直接 “克隆” 来产生新的对象,而且克隆出来的本体和克隆体看不出任何区别。 原型模式不单是一种设计模式,也是一种编程范型。简单理解 原型模式 Prototype:不根据类来生成实例,而是根据已有的实例对象生成新的实例对象 。 1.复制引用、复制对象、浅拷贝和深拷贝 首先定义一个类, import java . util . Date ; public class Person implements Cloneable { private int age ; // 定义年龄字段 private Date birth ; // 定义生日字段 @Override protected Object clone ( ) throws CloneNotSupportedException { return super . clone ( ) ; // 调用Object类的clone方法 } public

无协作,不原型!

扶醉桌前 提交于 2020-01-14 15:39:47
Mockplus3.1新增了团队协作功能,支持一键创建团队项目、团队成员快捷管理、一键通知成员审阅、多人评论批注的功能。Mockplus是一个 简单快速的原型设计工具 ,对于需要协作的项目,可允许多个团队成员共同编辑同一个项目文件,创建原型图并利用审阅、批注来高效协同工作,所有的讨论、意见、原型历史版本都会保留。,Mockplus 的团队协作功能将大大加快项目进度。 如何在Mockplus 中创建新的团队项目? 1.打开Mockplus后在创建项目按钮下拉菜单中选择“团队项目” 2.选择团队项目的项目类型,Mockplus支持全平台原型制作,包括手机项目、平板项目、网页项目、桌面项目、自由项目以及自定义项目。 3.点击确定。 Mockplus的团队项目创建流程避开了繁琐的创建文件、选择路径等选项,更加简单直观。 如何在Mockplus中进行团队项目成员管理? 一旦你创建完成一个Mockplus团队项目并同步,你就能立刻让其他人参与项目了。参与者需要拥有一个注册了Mockplus的邮箱账号,邀请者只需输入对方账号即可邀请对方加入,简单够用! 如何在Mockplus中对团队项目进行编辑、审阅、批注? Mockplus 开创性地将传统的签入、签出操作优化为更加直观的“进入编辑”与“结束编辑”。项目编辑状态通过页面名称前的小标志一目了然,点击小标志即可一键进入、结束编辑

原型工具之团队协作: Axure VS Mockplus

你离开我真会死。 提交于 2020-01-14 15:39:10
一款软件产品的诞生,必然会经历一个过程:需求分析、设计、开发、测试、上线。如此反复迭代。而设计阶段中,原型设计、制作、交流、审核、迭代,是软件设计和开发的重要保障。 简单的一段话,我们可以解读出很多隐含的信息,包括为什么要做原型设计,原型设计的在产品开发过程中的意义。而原型设计过程中,又涉及到 原型工具 的选择,如何制作原型,原型设计的保真度定位,产品设计师在原型设计过程中如何交流,如何进行团队协作,等等。 目前可供选择的原型工具在线框图设计和原型图设计方面都有各自非常出彩的地方,例如Axure的需求文档,Mockplus的快速交互,Justinmind的高保真。不仅如此,是否可以很好地支持团队协作,也是衡量一款原型工具的重要标准。 目前兼具原型设计和团队协作功能的工具,有国外的Axure RP和国内的Mockplus。 1. Axure RP Axure RP团队版和企业版都支持团队协作,可以创建和管理团队项目,即多人共同创作一个原型。 优势:Axure RP和其配套服务Axure Share提供了两种主要的协作模式。第一种是团队项目,团队项目是Axure RP的一大特点,用于与其他AxureRP的用户共同合作一个原型项目。第二个是在线讨论, 是Axure Share的一个功能,是一种相对于团队项目来说更广泛和更简单的协作模式。在浏览器中查看你项目的人不管是不是 Axure

Java设计模式四: 原型模式(Prototype Pattern)

一曲冷凌霜 提交于 2020-01-14 01:14:53
原型模式是一种创建型设计模式,它通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的. 原型模式多用于创建复杂的或者耗时的实例, 因为这种情况下,复制一个已经存在的实例可以使程序运行更高效,或者创建值相等,只是命名不一样的同类数据. 原型模式中的拷贝分为"浅拷贝"和"深拷贝": 浅拷贝: 对值类型的成员变量进行值的复制,对引用类型的成员变量只复制引用,不复制引用的对象. 深拷贝: 对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制. 类图: 实例一:浅拷贝 public class Prototype implements Cloneable { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Object clone() { try { return super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); return null; } } } public class TestMain { public