原型设计

原型模式详解

坚强是说给别人听的谎言 提交于 2020-02-13 23:20:26
  定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 Prototype 原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。   在JAVA语言中使用原型模式是非常简单的,这是因为Object类当中提供了一个本地方法clone,而JAVA中的任何类只要实现了Cloneable标识接口,就可以使用clone方法来进行对象的拷贝。 原型模式详解 优点:   使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。 使用原型模式的另一个好处是简化对象的创建,使得创建对象就像我们在编辑文档时的复制粘贴一样简单。 注意事项: 使用原型模式复制对象不会调用类的构造方法。因为对象的复制是通过调用Object类的clone方法来完成的,它直接在内存中复制数据,因此不会调用到类的构造方法。不但构造方法中的代码不会执行,甚至连访问权限都对原型模式无效。还记得单例模式吗?单例模式中,只要将构造方法的访问权限设置为private型,就可以实现单例

项目原型设计

只愿长相守 提交于 2020-02-13 20:53:24
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目原型设计 团队目标 切实可行的计算机协会维修预约平台 开发工具 Axue RP 8 原型下载 修!咻咻!维修平台原型设计 PDF下载 修咻咻原型设计PDF 团队信息 队员学号 队员姓名 个人博客地址 备注 221600126 刘忠燏 http://www.cnblogs.com/Downstream-1998/ 221600207 黄权焕 https://www.cnblogs.com/hyry/ 队长 221600328 苏明辉 https://www.cnblogs.com/ahuigg/ 221600330 吴可强 https://www.cnblogs.com/masgak/ 221600331 向鹏 https://www.cnblogs.com/xiang-peng/ 团内分工 队员学号 队员姓名 分工 贡献度 221600126 刘忠燏 用户信息编辑页面原型的设计实现 19% 221600207 黄权焕 文章发布、维修场次通知、登录注册页面原型的设计实现,整理博客内容 20% 221600328 苏明辉 预约零件信息查看页面的设计实现、效能分析、PSP 20% 221600330 吴可强 预约人员信息查看页面的设计实现 19% 221600331 向鹏 用户预约页面原型的设计实现

C# 设计模式———原型模式

走远了吗. 提交于 2020-02-08 20:17:08
原型模式简介 用原型实例指定创建对象的种类并且通过拷贝这些原型创建新的对象,是用于创建重复的对象,同时又能保证性能。该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。 原型模式: 动态获取一个类的运行状态,避免耗时new的实例化; 做对象copy 原型模式的copy只是一个浅copy,它并不能copy引用类型 深copy实现 让引用类型都实现一个Clone方法,从而手工实现这个深copy; C# BinaryFormatter通过二进制将对象的图进化序列化; 与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的。浅拷贝实现 Cloneable,重写,深拷贝是通过实现 Serializable 读取二进制流。 C# 原型模式 Demo using System ; using System . Collections . Generic ; namespace Prototype { class Program { static void Main ( string [ ] args ) { var person = new Person ( ) { Name = "jack" , Age = 20 , Address = new Address ( ) { Province = "陕西" , City = "渭南" }

设计模式之原型模式

谁说我不能喝 提交于 2020-02-08 08:25:13
原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并通过这些原型创建新的对象。 适用场景: 类初始化消耗的资源较多 适用new生成一个对象需要非常繁琐的过程(数据准备,权限访问) 构造函数比较复杂 在循环体中产生的大量对象 在Java中 可以通过 实现Cloneable 接口 重写clone()方法即可。 浅克隆 创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。 深克隆 创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。 来源: CSDN 作者: Eternal1125 链接: https://blog.csdn.net/qq_36306590/article/details/104214429

23种设计模式详讲-原型模式

孤者浪人 提交于 2020-02-08 00:23:58
一、什么是原型模式: 传统的创建的对象,可以用new直接新建对象,但是如果某些类的属性太多,这样构造起来会相对复杂;这里提供了一种不用通过构造方法,创建对象的方法;通过Jdk自带的Cloneable接口,实现对象的拷贝,创建新的对象; 二、何时使用原型模式: 原型模式其实就是一个对象在创建另一个可定制的对象,而且不需要指定任何创建的细节。Java提供了Cloneable接口,其中有一个唯一方法Clone(),实现这个接口就可以完成原型模式了。 一般在初始化的信息不发生变化的情况下,克隆是最好的办法。既隐藏了对象创建的细节,又对性能是大大的提高。不用重新初始化对象,而是动态地获得对象运行时的状态。 三、原型模式大概分为潜拷贝和深度拷贝: 1)潜拷贝: 代码示例: package com.jason.study.design.prototype.simple; import com.jason.study.design.prototype.Teacher; public class School implements Cloneable { private String name; private int id; private Teacher teacher; public String getName() { return name; } public void setName

js 原型和原型链解释

感情迁移 提交于 2020-02-05 03:31:13
1,为什么需要原型?   用构造函数生成实例对象,有一个缺点,无法共享属性和方法。   每一个实例对象,都有自己的属性和方法的副本。这不仅无法做到数据共享,也是极大的资源浪费   考虑到这一点,设计js作者决定为构造函数设置一个prototype属性。   这个属性包含一个对象(以下简称"prototype对象"),所有实例对象需要共享的属性和方法,都放在这个对象里面;那些不需要共享的属性和方法,就放在构造函数里面。   实例对象一旦创建,将自动引用prototype对象的属性和方法。也就是说,实例对象的属性和方法,分成两种,一种是本地的,另一种是引用的。 2,原型(prototype)   概念:每一个构造函数都有一个 prototype 属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。 3,原型的继承方式(两类5种)   1,构造函数绑定 (使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中加一行)   2, prototype模式   3, 直接继承prototype   4,利用空对象作为中介   5,拷贝继承 4,原型链   概念:在javascript中,每个对象都有一个指向它的原型(prototype)对象的内部链接。每个原型对象又有自己的原型,直到某个对象的原型为null为止,组成这条链的最后一环

软工第一次结对作业——原型设计

百般思念 提交于 2020-02-04 14:55:21
1.结对信息 陈甘霖(031502604)——支队长 蔡鸿杰(031502601)——政委 曾玮诗(031502602)——二营长 说好的结对为什么这个队这么牛逼居然有三个人?因为支队长和政委都是大佬,需要二营长扛意大利炮! 2.原型开发工具 墨刀 MOCKINGBOT 为什么选择墨刀 ?首先,支队长政委二营长一致决定坚决服从老师助教指挥推荐,想提高用墨刀。其次,下载运用后你会发现墨刀对于APP的原型设计真的是体验非常好,其控件的拖拉、大小的调整,都会自然的去匹配相应的母版大小。无需去担心有多移动一点或多选择一点,减少了不少工作环节。 3.问题描述 选择部门的现状: 各个部门在开学初占据学校青春广场有利位置,通过张贴海报、发传单等形式向学生宣传;对某个部门感兴趣的同学,填写加入部门申请表交给各部门负责人。各部门负责人通过一种说不清道不明的算法对申请的学生进行人工筛选,人工筛选留下的学生也面临被淘汰问题。 筛选和淘汰的规则如下: 部门纳新人数和面试时间必须事先申报确定; 部门活动时间包括常规活动时间(如每周三19点-20点)和临时活动时间,常规活动时间在纳新时候就要公布; 如果一个学生常规部门活动时间请假超过6次,将面临被淘汰; 学生最多加入5个部门,但是要考虑部门活动时间冲突次数; 未参加部门面试的学生不能纳入部门。 现状困扰的是:流程繁琐复杂,各个部门手工发放申请表,手工收集汇总

几个常用的产品原型设计工具

对着背影说爱祢 提交于 2020-02-03 06:50:16
有人说产品经理是产品的灵魂,有人说产品经理是企业的核心。对于我们未来想要做产品经理,获得较高的收入,实现自己对产品的诠释,原型图是肯定绕不开的。即便刚毕业我们去做产品助理,原型设计也是产品助理的主要工作。 下面跟大家聊聊几款产品经理常用的原型设计工具,产品工作感兴趣的同学可以用来熟练下使用技巧,未来也提高自己做产品助理/经理的录取率不是。 1.Axure 这个老家伙是肯定要有的,圈子里面的公认产品设计工具,很多单位的招聘条件上清清楚楚写着“熟练使用Axure”有木有。这有点像你学摄影的,一定要学会PS一样;更像你大学毕业,四级英语必须要考过一样。 Axure的使用简单也不简单,相关网络教程和图书有的是,百度一下一大把一大把的。当然职优易后续也会更新相关的文章,来教大家如何使用这款产品设计神器。 2.Mockplus(摩客) 一款产品小白都可以快速上手操作的超级省时省力的工具,这款产品的交互也是它本身的一大亮点,只需要拖一拖鼠标,即可完成交互的设计,所见所得,没有复杂的参数,更无需编程。 3.墨刀 说到了摩客必然要说到墨刀,墨刀对于APP的原型设计真的是体验非常好,怎么说呢?就像有一个无形的人在帮助你,和你一起打造你的原型APP。(当然以后也适用微信小程序的设计),其控件的拖拉、大小的调整,都会自然的去匹配相应的母版大小。无需去担心有多移动一点或多 选择一点

(41)freeRTOS之任务管理

元气小坏坏 提交于 2020-01-29 10:52:00
1. 简介: 在 FreeRTOS 中没有线程和进程的区别,只有一个被翻译成任务的程序,相当于进程的概念,拥有独立的栈空间。 对于实时性,可以分为 软实时、硬实时:桌面电脑的输入处理可以看做是软实时,当键盘按下在某个时间内没有做出相应,只是做出提示,提示超时,只会给人一种反应慢的印象,不能说不能用。硬实时则是像汽车上的安全气囊,必须在特定时间内完成,一旦失败,就算是不能使用的标志。 FreeRTOS 内核支持优先级调度算法,CPU 总是让处于就绪态和优先级高的任务先运行。 FreeRTOS 内核同时支持轮询调度算法, CPU 对享有相同优先级的任务,平分 CPU 时间。 FreeRTOS 内核可以根据用户需要设置成可剥夺型或不可剥夺型内核,可剥夺指的是高优先级的任务能剥夺正在执行的低优先级的任务,可以保证系统满足实时性的要求。不可剥夺,遇到同时发生的任务会一直等待着先发生的任务完成,可以提高 CPU 的运行效率。 FreeRTOS 对系统任务的数量没有限制。 任务因为自己的优先级而一直得不到运行的状态叫做被饿死(starve) 2. 函数: (1)变量类型定义: /* Type definitions. */ #define portCHAR char #define portFLOAT float #define portDOUBLE double #define

Axure 原型设计的三步进阶法

坚强是说给别人听的谎言 提交于 2020-01-28 05:15:36
平时跟很多同学朋友的交流过程中,对于axure的需要做到怎样,众说纷纭。总结了一下大家的意见,分别有以下几种: 1、掌握基本的搭建方法即可,不需要做交互; 2、既然做就要做到尽善尽美,页面和交互都是比较重要的,必须做到 3、做到何种程度因人因项目而异,但是需要会做,以免需要做时无从下手。 这三种观点明显比较更受大家支持的是第三种。 有一位学员,是一位女孩子,我们暂时称呼为S同学吧,也是持这种观点。 在学习的过程当中,原来与其他同学一样,她在学习的前半段也是只学习了较为基础的内容:包括页面的搭建、部件元素的使用和设置、简单交互的设置等等。 在没有接触进一步的学习之前,觉得axure的使用就是这样了,再进一步的使用也是与原来学习过的基础的内容无异。 但在进行了进一步的学习之后,刷新了对于axure的认知,知道了axure原来也可以这么做。 这里以S同学做的一个作业作为例子给大家看看,共同来体验一下S同学当时的感受。 这个作业是这样子的,在输入框输入内容,在列表当中做出筛选。这个交互,也是随着学习的深入和认识的逐渐加深,有一个变化的过程。 简单交互完成 用简单的显示隐藏动作去做设置,例如要筛选出“交通银行”的话,就设置当输入框的文字为“交通银行”的时候,隐藏其他银行的名字。 这个设置方法有比较大的缺陷是:只能输入指定的文字,这里给它设定的是输入“交通银行”,也可以设定为“交”/“通”/