原型设计

JavaScript创建对象的方式

狂风中的少年 提交于 2020-01-27 20:41:15
一、工厂模式    工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程。     考虑到在 ECMAScript 中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节。 function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); }; return o; } var person1 = createPerson("Nicholas", 29, "Software Engineer"); var person2 = createPerson("Greg", 27, "Doctor"); console.log(person1); console.log(person2);   运行结果如下图所示:   函数 createPerson()能够根据接受的参数来构建一个包含所有必要信息的 Person 对象。   可以无数次地调用这个函数,而每次它都会返回一个包含三个属性一个方法的对象。   工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)。 二、构造函数模式  

使用gui design studio做原型设计

僤鯓⒐⒋嵵緔 提交于 2020-01-26 02:43:02
原型设计有很多工具,比如axure rp、irise studio等等。而且国内已经有组织开始推行axure RP,而且传言国内几个互联网公司开始使用axure RP了。 本人试用了axure RP,和 gui design studio后,还是推荐使用gui design studio到实际应用开发中。 如果你是需要比较逼真的仿真效果,建议使用axure RP.如果你是想快速的把思路,以可视化的方式来表现出来,并可以和他人和客户来交流想法的话, 推荐使用gui design studio。 为什么呢,因为gui design studio 提供了比较多的绘制元素(按钮、输入框、网格、office2007效果),不用为了绘制元素去花费太多功夫,因为我们更多的是先确定思路,而不是细节。 正是这种方式才合乎原型法的真谛,关键的是交互过程和产品样子,而不是界面的细节(颜色、背景等)。而且该工具比较简单,直接拖拉就可以了,就像搭积木一样。 十分的像vb开发环境,但是它却不像vb那样的专业,必须是懂编程人员才会用。 虽然界面让人觉的不是那么华丽,而且还让人觉得很土。但是作为一个原型工具,让精力集中到设计中,而不是自身上来说,还是可以让人接受的。 当你设计完一个界面后,直接按F9,就会调用模拟器模拟界面效果,可以支持鼠标的点击,及屏幕的跳转。这个作为详细设计界面设计也是十分的妙, 不用讲那么多

设计模式之创建型模式

心已入冬 提交于 2020-01-25 01:28:23
1.单例模式 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点 实现:一个类的对象的产生是由类构造函数来完成的,如果想限制对象的产生,一个办法就是将构造函数变为私有的(至少是受保护的),使得外面的类不能通过引用来产生对象;同时为了保证类的可用性,就必须提供一个自己的对象以及访问这个对象的静态方法 放一个类图直观描述 实现方式: 饿汉式 懒汉式 2.工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式) 定义:主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的 a.简单工厂模式 定义:简单工厂模式又称静态工厂方法模式,是工厂方法模式的一种特例,两者归为一类。它存在的目的很简单:定义一个用于创建对象的接口 模式组成部分: 工厂类角色:用于商业逻辑和判断逻辑,由一个具体类实现 抽象产品角色:一般是具体产品继承的父类或者实现的接口,由接口或者抽象类实现 具体产品角色:工厂类所创建的对象就是此角色的实例,由一个具体类实现 模式实例 工厂方法模式 定义:去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担 实现:使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的“上帝类”,分担了对象承受的压力,使得结构变得灵活起来 模式组成部分: 1.抽象工厂角色:

如何从科学论文中实现一个算法

空扰寡人 提交于 2020-01-25 01:04:43
原文: http://codecapsule.com/2012/01/18/how-to-implement-a-paper/ 作者:Emmanuel Goossaert 本文是从科学论文中实现算法的简短指南。我从书籍和科学出版物中实现了许多复杂的算法,本文总结了我在搜索,阅读,编码和调试方面所学到的知识。这显然仅限于与计算机科学领域有关的领域的出版物。然而,您应该能够将以下提供的指导方针和良好做法应用于任何类型的文件或实施。 1 - 在你进入之前 在您阅读技术论文并实施之前,您应该查看几点。每当你准备开始这样一个项目时,请确保你仔细地盖住他们。 1.1 - 找到一个开源实现,以避免编码 除非你想为了更多地了解这个领域来执行论文,否则你无需实现。事实上,你想要的不是对纸张进行编码,而只是实现纸张的代码。所以在你开始任何事情之前,你应该花几天的时间试图在互联网上找到一个开源的实现。只要考虑一下:你宁愿失去两天的时间寻找代码,还是浪费两个月来实现一个已经可用的算法? 1.2 - 找到更简单的方法来实现你的目标 问问自己想要做什么,如果更简单的解决方案可以满足您的需要。您可以使用其他技术 -即使结果只有您想要的80% -不需要实现该文档,并且您可以在随后的两天内运行可用的开源库?有关更多信息,请参阅我的文章 20/80生产力规则 。 1.3 - 小心软件专利 如果您在美国,请注意软件专利

面向对象之原型链

你说的曾经没有我的故事 提交于 2020-01-23 16:26:17
面向对象 面向对象是把事物分解成一个个的对象,然后由对象之间分工与合作。面向对象的特性就是封装性、继承性和多态性,优点就是易维护、易复用、易扩展。根绝面向对象的这三个特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。性能方面确实没有面向过程高。 面向对象的思维就是抽取对象共用的属性和方法进行封装,然后对类进行实例化。 < script > function Dog ( name , age ) { this . name = name , this . age = age } var haha = new Dog ( 'haha' , 12 ) console . log ( haha ) < / script > 原型 在javascript中,函数可以有属性。 每个函数都有一个特殊的属性叫作原型(prototype)。这个属性指向函数的原型对象,并且这个属性是一个对象数据类型的值。 原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中。 原型链 1.__proto__和constructor 每一个对象数据类型(普通的对象、实例、prototype…)也有一个特殊的属性__proto__,属性值是当前实例所属类的原型(prototype)。原型对象中有一个属性constructor,

JAVA设计模式(系列) 原型模式

一笑奈何 提交于 2020-01-23 16:16:36
浅拷贝/深拷贝 序列化机制实现深拷贝 模式定义:原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的的对象实例; public class ProtoType { public static void main ( String [ ] args ) throws CloneNotSupportedException { Product product = new Product ( "name" , new String [ ] { "1" , "wq" } , new ProductBaseInfo ( "213" ) ) ; Product clone = product . clone ( ) ; System . out . println ( product ) ; System . out . println ( clone ) ; System . out . println ( product == clone ) ; System . out . println ( ) ; //验证浅拷贝 //重写 clone方法;使得里面的ProductBaseInfo也拷贝;否则对象引用的还是原来的 product . getProductBaseInfo ( ) . setInfo ( "789" ) ; System . out . println (

c++设计模式-原型模式

廉价感情. 提交于 2020-01-23 15:53:16
动机 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。 如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变? 模式定义 使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建信的对象。 ——《设计模式》GoF 结构 示例 //抽象类 class ISplitter{ public: virtual void split()=0; virtual ISplitter* clone()=0; //通过克隆自己来创建对象 virtual ~ISplitter(){} }; //具体类 class BinarySplitter : public ISplitter{ public: virtual ISplitter* clone(){ return new BinarySplitter(*this);//调用自身的拷贝构造函数 } }; class TxtSplitter: public ISplitter{ public: virtual ISplitter* clone(){ return new TxtSplitter(*this); } }; class PictureSplitter:

原型设计实践-使用gui design studio进行原型设计

会有一股神秘感。 提交于 2020-01-22 07:37:59
如何制作界面图 在实际开发中,我们常常会用很多工具,绘制界面图。用于描述我们的产品的某个功能对应的界面,将来会是什么样子。 可以使用的工具很多(visio、smartdraw等),也有用excel画框图,来标明程序的各个区域的。其实使用gui design studio,可以很容易的 话界面图。不仅轻松,而且十分的真实,既获得一个很好的效果,也能减少沟通上的一些不便。不仅可以向非开发人员展示,也可以向开发人员展示 你的设计。 1、 新建设计 打开gui design studio,其默认会打开welcome工程。由于我们只是做一个界面效果图,所以不会用到工程那一块的功能。我们就直接使用File菜单下的new菜单项(CTRL+N)新建一个设计。 2、 添加界面控件 右边的面板叫设计器面板,它由多个页签构成。分别对应的功能是:工程面板、元素面板、图标面板、注释面板、故事板、备注面板。而我们要用的是第二个面板“元素面板”。在这个面板上分为上下两部分,上部分是一个分类列表,下部分为各个分类下的元素。当你选择一个分类后,下面的面板就会显示该分类的元素。 要将元素添加到设计文档中,有两种方法。1)用鼠标双击要加入的元素 2)用鼠标单选要加入的元素,不要放鼠标左键,将对应的元素拖拉到文档中。 整个设计文档中间有一个红色线条围成的矩形,这个区域代表屏幕区域。在这个区域里的元素

软件工程——六种模型

老子叫甜甜 提交于 2020-01-22 04:01:13
瀑布模型 思想:1.从制作时间上按工序把问题化简 2.将功能实现与制作分开便于分工协作 特点:1.时间顺序性和依赖性 2.推迟实现的观点 3.质量保证的观点 优点:1.奠定了软件工程方法的基础; 2、流水依赖,便于分工协作 3.退出物理实现,易于修改文档,有复审质量保证 缺点:1.和用户见面较晚 2.成功率低,一般为25% 使用范围: 1.适用于系统要求明确的系统 2.各种应用软件的开发均可以使用 开发方法:遵循生命期划分,明确各阶段任务上一阶段完成任务后产生的文档给下一阶段,不听阶段任务有不同级别的软件人员承担。 快速原型模型 思想:找出主需求快速建立原型,对原型评价修改测试 方法:1.丢弃型开发:第一次开发的原型不适最终的,为了获取数据 2.间増式开发:第一次原型基础上修改,再以第二次原型为核心修改 好处 :用户和设计人员一直在一起 演化模型 由于开发初期对需求认识不够,很难一次开发成功,会出现返工。 第一次试验开发,目标是探索可行性,弄清软件需求 第二次在此基础上获得较为满意的产品(第二次有可能是多次) 渐増模型 基本思想:允许从部分需求出发,先建立一个不全面的系统通过测试这个系统,进一步是系统扩充和完善。 优点:开发的始终开发人员和用户都共同参与,有问题可以及时修改,从而很好的满足用户的需求 适用范围:适用于那些知识型软件系统的开发(需求不明确) 特点:1

原型模式(Prototype)

不羁的心 提交于 2020-01-21 15:49:48
一、定义 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。 二、例子 原型(实际上是implements了Cloneable接口,进而重写clone()方法): package com.wuychn.prototype; public class ProtoType implements Cloneable { private String name; @Override public ProtoType clone() { try { return (ProtoType) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 测试代码: package com.wuychn.prototype; public class Test { public