原型模式

this指向 - 总结

大兔子大兔子 提交于 2020-02-27 11:55:51
/* 总结: this 的指向: 1.this 的指向 是在执行上下文时才确定的, 并且确定后不可更改; 2.this 指向 “其执行上下文的环境对象”; “其执行上下文的环境对象” 判读依据如下: */ /* 浏览器环境下: 严格模式下: 1.全局上下文中的 this “其执行上下文的环境对象”为,全局执行上下文的环境对象,而全局执行上下文的环境对象 为 Window对象; 2.函数上下文中的 this 情景一:apply、call、bind 指定环境对象 “其执行上下文的环境对象”为,被指定的环境对象,无论是什么,即使是 null 或者 undefined; 情景二:没有指定环境对象 ->1.作为 独立函数 执行 “其执行上下文的环境对象”为 undefined; ->2.作为 对象方法 执行 “其执行上下文的环境对象”为 这个拥有它的对象; 3.对象属性中的 this “其执行上下文的环境对象”为,全局执行上下文的环境对象 为 Window对象; 4.构造函数 和 原型方法中的 this 构造函数中: “其执行上下文的环境对象”为,以构造函数名命名的新对象; 原型方法中: “其执行上下文的环境对象”为,构造函数的原型对象; 非严格模式下: 1.全局上下文中的 this (同 严格模式) 2.函数上下文中的 this 情景一:apply、call、bind 指定环境对象 (同

【设计模式最终总结】原型模式:对象的克隆

好久不见. 提交于 2020-02-27 07:08:37
1 原型模式概述 通过一个原型对象克隆出多个一模一样的对象,该模式称之为原型模式。比如孙悟空可以用猴毛根据自己的形象,复制(又称“克隆”或“拷贝”)出很多跟自己长得一模一样的“身外身”来。 2 原型模式的一个需求 订会议室:当你预定一个会议室时,可能有十几个项需要填写,但这些项呢,基本都是一致的,只有个别项需要修改,所以可以生成一个模板,然后复制出来,再去修改。 查询特征值:我要依次查询60天的特征出来,每次都要构造一个查询条件,其他部分都一样,只有日期不一样,这个查询条件就可以用原型模式 同样的,数据同步通道、数据校验任务等等,都可以。 3 原型模式概述   原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。   原型模式的工作原理很简单:将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自己来实现创建过程。由于在软件系统中我们经常会遇到需要创建多个相同或者相似对象的情况,因此原型模式在真实开发中的使用频率还是非常高的。原型模式是一种“另类”的创建型模式,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法来实现。 需要注意的是通过克隆方法所创建的对象是全新的对象 ,它们在内存中拥有新的地址,通常对克隆所产生的对象进行修改对原型对象不会造成任何影响,

设计模式笔记----原型模式

蹲街弑〆低调 提交于 2020-02-25 15:54:15
一,克隆羊问题 现在有一只羊tom,姓名为tom,年龄为1,颜色为白色,请编写程序创建和tom属性完全相同的10只 二,传统方式解决 1.sheep类 package 设计模式.原型模式.传统方式; public class Sheeep { private String name; private int age; private String color; public Sheeep(String name,int age,String color){ super(); this.name=name; this.age=age; this.color=color; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 2.Client类完成复制 package 设计模式

设计模式-原型模式

女生的网名这么多〃 提交于 2020-02-22 15:17:43
一、定义 原型模式(Prototype Pattern)的简单程度仅次于单例模式和迭代器模式。 Specify the kinds of objects to create using a prototypical instance, and create new objects by copying the prototype.(用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。) 原型模式的通用类图如下: public class PrototypeClass implememts Cloneable { @Override public PrototypeClass clone(){ PrototypeClass prototypeClass = null; try{ prototypeClass = (PrototypeClass) super.clone(); }catch (CloneNotSupportedException e) { //异常处理 } return prototypeClass; } } 实现一个接口,然后重写clone方法,就完成了原型模式。 二、应用 2.1 优点 性能优良:原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。 逃避构造函数的约束

6、设计模式-创建型模式-原型模式

泪湿孤枕 提交于 2020-02-22 15:16:15
原型模式 在使用原型模式时,我们需要首先创建一个 原型对象 ,再通过复制这个原型对象来创建更多 同类型的对象。 定义: 使用原型实例指定创建对象的种类,并且通过 拷贝 这些 原型创建新的对象。原型模式是一种对象创建型模式。 工作原理: 将一个原型对象传给那个要发动创建的对象,这个要发动创建 的对象通过请求原型对象拷贝自己来实现创建过程。 由于在软件系统中我们经常会遇到需要 创建多个相同或者相似对象的情况,因此原型模式在真实开发中的使用频率还是非常高的。 原型模式是一种“另类”的创建型模式,创建克隆对象的工厂就是原型类自身,工厂方法由 克隆 方法来实现。 注意: 通过克隆方法创建的对象是全新的对象 在内存中拥有最新的地址 通常对克隆所产生的对象进行修改对原型对象不会造成任何影响 每一个克隆对象都是通过相互独立的 通过不同方式修改可以得到一系列相似但不完全相同的对象 图示结构: 角色: Prototype (抽象原型类):它是声明克隆方法的接口,是所有具体原型类的公共父类,可以 是抽象类也可以是接口,甚至还可以是具体实现类。 ConcretePrototype (具体原型类):它实现在抽象原型类中声明的克隆方法,在克隆方法中 返回自己的一个克隆对象。 Client (客户类):让一个原型对象克隆自身从而创建一个新的对象,在客户类中只需要直 接实例化或通过工厂方法等方式创建一个原型对象

JavaScript 面向对象编程(一)---- 创建对象

橙三吉。 提交于 2020-02-16 23:48:52
一、万物皆对象 JavaScript 的所有数据类型都可以看成对象,所以我们常说 JavaScript 中万物皆对象。 在 JavaScript 中,对象是一个泛化的概念,任何值都可以转换为对象,以对象的方式进行使用。如数字对象、布尔值对象、字符串对象、函数对象、数组对象等等,它们都继承 Object 类型对象。同时, JavaScript 也允许自定义对象。 const num = new Number ( 1 ) ; console . log ( typeof num ) ; // object const str = new String ( 'hello' ) ; console . log ( typeof str ) ; // object const d = new Array ( ) ; console . log ( typeof d ) ; // object const obj = new Object ( ) ; console . log ( typeof obj ) ; // object 面向对象( Object-Oriented,OO )的语言有一个标志,那就是它们都有类的概念。通过类可以创建任意多个具有相同属性和方法的对象。 但 JavaScript 的面向对象编程和大多数其他语言(如 Java )都不太一样。在 ECMAScript6 规范之前

23种设计模式(5):原型模式

China☆狼群 提交于 2020-02-15 03:43:34
定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 类型:创建类模式。 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。 重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。 实现代码: class Prototype implements Cloneable { public Prototype clone(){ Prototype prototype = null; try{

设计模式之原型模式——复制建立对象实例

岁酱吖の 提交于 2020-02-14 19:57:23
有一段时间没看书了,之前去参加了一个省上的比赛,马马虎虎吧……得了一个二等奖。不过感觉现在的比赛都有点水啊~哎,废话不多说,切入正题。 当我们在建立一些对象实例时,通常会使用new 关键字来进行实例化。 但有时候不靠指定类名的方式就能产生对象实例,此时不使用类来建立对象实例,而是复制对象实例另建一个新的对象实例。 通常这种需求发生在以下几种情况: 种类过多不方便整理成类时 不容易利用类产生对象实例时 希望把框架和所产生的对象示例分开时 下面我们用一个例子来看看。 需要创建五个JAVA文件: Product.java、Manager.java、MessageBox.java、UnderlinePen.java、Main.java 我们一个一个来: Product.java: package framework; public interface Product extends Cloneable{ public abstract void use(String s); public abstract Product ctrateClone(); } View Code Manager.java: package framework; import java.util.Hashtable; public class Manager { private Hashtable

java设计模式4——原型模式

你离开我真会死。 提交于 2020-02-14 11:30:07
java设计模式4——原型模式 1、写在前面 本节内容与C++语言的复制构造函数、浅拷贝、深拷贝极为相似,因此建议学习者可以先了解C++的该部分的相关知识,或者学习完本节内容后,也去了解C++的相应内容,进行比对学习。 2、原型模式介绍 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。 3、java实现克隆的核心 1、实现一个接口(Cloneable) 2、重写一个方法(clone()) clone()方法的源码分析 protected native Object clone() throws CloneNotSupportedException; 由方法声明的放回值类型=>native,可知该方法实际上是一个C++封装好的方法,由java来进行调用,相当于C++语言的复制构造函数,但是又有所区别。 4、第一种原型模式实现(浅拷贝) 4.1、建立视频的原型类 package com.xgp.company.创建型模式.第四种

原型模式详解

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