原型模式

原型模式

ぐ巨炮叔叔 提交于 2019-12-06 09:10:40
一、定义: ​ 原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 二、特点: ​ 一般在初始化信息不发生变化的情况下,克隆是最好的方法。这既隐藏了对象创建的细节,又对性能是大大的提高。可以不用重新初始化对象,而是动态地获得对象运行时的状态。 浅复制:只复制它本身和其中包含的值的类型的成员变量,而引用类型的成员变量并没有被复制。 深复制:复制它本身和其中包含的所有成员变量。 三、示例代码: ​ 浅复制: //原型类,简历 public class Resume implements Cloneable { private String name; private String sex; private String age; private WorkExperience work; public void setPersonalInfo(String sex, String age) { this.sex = sex; this.age = age; } public Resume(String name) { this.name = name; work = new WorkExperience(); } public void setWork(String workDate, String workCompany) { work

JS继承的原理、方式和应用

自作多情 提交于 2019-12-06 07:14:10
概要: 一.、继承的原理 二、继承的几种方式 三、继承的应用场景 什么是继承? 继承:子类可以使用父类的所有功能,并且对这些功能进行扩展。继承的过程,就是从一般到特殊的过程。 要了解JS继承必须要了解this的指向,原型prototype、构造器constructor、原型链_proto_; 第一:关于this的指向问题: // "use strict" //严格模式(strict mode)即在严格的条件下运行,在严格模式下,很多正常情况下不会报错的问题语句,将会报错并阻止运行 //this是什么? JS关键字,在JS中具有特殊意义,代表一个空间地址 //this指向:this最终指向的是运行时调用该函数的对象 // 一、初始情况下 // 全局作用域下的this指向:即this和window指向同一个堆内存 this == window; //true this === window; //true // console.log("init," + this) //二、函数和对象里的this的指向 var x = "x"; function test() { var x = 1; // this.x = 2; console.log(this); console.log(this ? this.x : ''); } //直接调用 test(); //

23中设计模式——原型模式

℡╲_俬逩灬. 提交于 2019-12-05 23:49:22
原型模式 一、定义 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 主要作用:主要用来对象的复制。通过第一次new的实例化的对象进行克隆,之后需要实例化对象时,直接克隆实例化对象变行。 二、UML图 三、原型模式的用法和注意点 1)用法 原型模式的核心类(接口)是:Prototype类(接口),在Java中Prototype需要具备以下的条件: 1、实现Cloneable接口,Java中的Cloneable是一个标志性接口,接口中不存在任何的方法。目的是为了告诉Jvm,实现了这个接口就可以被克隆,否则在运行的时候回抛出CloneNotSupportedException异常。 2、clone方法的作用是对象的拷贝,重写Object类的clone()方法,原因是因为Object类中的clone()方法是protected访问权限。有些类无法进行访问,将其改为public访问权限变行。 2)注意点 1、clone()方法具有两种拷贝,一种是浅拷贝,一种是深拷贝。浅拷贝,拷贝的只是对象中的基本数据类型和其包装类还有String。想要深拷贝,必须要将对象中的数组,容器,对象进行另外拷贝。 2、原型模式复制对象不会调用类的构造方法,但是你进行new初始化一定是通过构造方法的。为什么原型模型复制对象不会调用类的构造方法呢

原型模式

一个人想着一个人 提交于 2019-12-05 14:50:43
原型模式 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。 1、创建 Cloneable 接口的抽象类 1 public abstract class Hero implements Cloneable { 2 private String id; 3 protected String name; 4 5 abstract void behavior(); 6 7 public Object clone() { 8 Object clone = null; 9 try { 10 clone = super.clone(); 11 } catch (CloneNotSupportedException e) { 12 e.printStackTrace(); 13 } 14 return clone; 15 } 16 17 public String getId() { 18 return id; 19 } 20 21 public void setId(String id) { 22 this

前端知识梳理

随声附和 提交于 2019-12-05 14:18:22
转载: https://blog.csdn.net/weixin_34179968/article/details/88002844 一:数据存储与赋值: 1:基本数据类型在栈中存储变量名和值。 null和undefined, 都是数据类型,undefined表示未定义,有且仅有一个值,就是undefined, null:表示空对象,typeof结果是object,和对象挂钩用null 2:引用数据类型在栈中存储变量名和在堆中存储的地址编号。 引用类型就是对象包括:内置对象(String,boolean,Date,RegExp,Math).宿主对象(bom,dom),自定义对象 dom2:bom:浏览器对象模型,有window对象,window对象默认就存在的, dom:文档对象模型, 事件委托: html css js var ul=document.getElementById('ul'); ul.οnclick=function(e){ console.log(e.target.innerHTML) } dom2级注册事件和解除事件从ie9开始支持, 二: 原型和原型链: 原型:每一个对象都有一个proto,每一个函数都有一个prototype,函数也是对象,所以也有proto, 原型属性:隐士原型对象上的属性 原型链:js每一个对象都有一个prototype属性

对几种设计模式的归纳理解

时光总嘲笑我的痴心妄想 提交于 2019-12-05 03:14:55
工厂模式 只对结果赋值,封装创建过程,保证独一无二 单例模式 保证过程中只有一个实例 原型模式 多个实例,一个原型派生多份数据 代理模式 找人办事,增强职责 委派模式 老板分配任务给管理人员 策略模式 管理人员根据不同情况分配任务给员工具体实现 模板模式 流程标准化,具体实现剥离主干 适配器模式 兼容转接头、支持不同支付方式 装饰器模式 奶茶加料 观察者模式 任务完成时触发通知事件 来源: https://www.cnblogs.com/erfsfj-dbc/p/11901952.html

原型设计模式

廉价感情. 提交于 2019-12-04 18:33:50
克隆羊项目需求 现在有一只羊tom,姓名为: tom,年龄为:1,颜色为:白色,请编写程序创建和tom羊属性完全相同的10只羊。 传统方式 1、Sheep类 @Getter @Setter @ToString @AllArgsConstructor public class Sheep { private String name; private int age; private String color; } 2、客户端代码 public class Client { public static void main(String[] args) { //传统的方法 Sheep sheep = new Sheep("tom", 1, "白色"); Sheep sheep2 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor()); Sheep sheep3 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor()); Sheep sheep4 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor()); Sheep sheep5 = new Sheep(sheep.getName(),

四、原型模式

你离开我真会死。 提交于 2019-12-04 18:28:07
原型模式 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 解释:给定一个原型对象来指明所要创建的对象的类型,然后用拷贝这个原型对象的方法来创建出更多的同类型对象。 Java中原型模式的实现 在JAVA里,通过克隆(Clone())方法来实现原型模式。 任何类,要想支持克隆,必须实现一个接口 Cloneable,该接口中有clone()方法,可以在类中重写自定义的克隆方法。 两种不同的克隆形式: 浅拷贝:拷贝出来的对象实例和原型对象是一模一样的。在浅拷贝中,如果原型对象的成员变量基本类型,那么就直接复制,如果是复杂的类型(枚举、对象、数组)就只复制对应的内存地址。无论原型对象还是克隆后的对象,只要是修改了复杂的数据类型,那么两个对象会同时被修改,因为它们共享同一地址值。 深拷贝:拷贝出来的对象实例和原型对象也是一模一样的,但是没有任何关联,修改其中一个对象,不影响另一个对象。 浅拷贝 在java中浅拷贝只需要实现Cloneable接口调用Object的clone方法即可 浅拷贝代码实现: public class Monkey implements Cloneable{ private int age; private String name; //省略get、set方法 @Override protected Object clone() throws

学习第三天(2019-11-16)

这一生的挚爱 提交于 2019-12-04 16:28:31
第六章 面向对象的程序设计 ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”可以把这里的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。 1、对象的属性类型 ECMAScript中有两种属性:数据属性和访问器属性。 a:数据属性 数据属性包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有4个描述其行为的特性。 [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特 性,或者能否把属性修改为访问器属性,默认值为 true。 [[Enumerable]]:表示能否通过 for-in 循环返回属性,默认值为 true。 [[Writable]]:表示能否修改属性的值,默认值为 true。 [[Value]]:包含这个属性的数据值,默认值为 undefined。 要修改属性默认的特性,可以使用 ECMAScript 5的Object.defineProperty()方法。这个方法 接收三个参数:属性所在的对象、属性的名字和一个描述符对象。 b:访问器属性 访问器属性不包含数据值,它们包含一对儿 getter和 setter函数(这两个函数不是必须的)。在读取访问器属性时,会调用 getter函数,这个函数负责返回有效的值; 在写入访问器属性时,会调用 setter函数并传入新值

设计模式之原型模式、策略模式、观察者模式

折月煮酒 提交于 2019-12-04 14:56:08
一、原型模式 1、什么是原型模式 克隆 原型模式是一个创建型的模式。原型二字表明了改模式应该有一个样板实例,用户从这个样板对象中复制一个内部属性一致的对象,这个过程也就是我们称的“克隆”。被复制的实例就是我们所称的“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者构造耗时的实例,因为这种情况下,复制一个已经存在的实例可使程序运行更高效。 2、原型模式应用场景 (1)类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等,通过原型拷贝避免这些消耗。 (2)通过new产生的一个对象需要非常繁琐的数据准备或者权限,这时可以使用原型模式。 (3)一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用,即保护性拷贝。 Spring框架中的多例就是使用原型。 3、原型模式UML类图(通用) 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: (1)实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。 (2