原型模式

【天赢金创】面向对象的程序设计之创建对象

岁酱吖の 提交于 2020-03-17 22:43:42
某厂面试归来,发现自己落伍了!>>> 对象的定义:无序属性的集合,属性的值可以是基本值、对象或者函数. 每个对象都是基于一个应用类型创建的,这个引用类型可以是内置的(例如Object Array Math),也可以是用户自定义的. 基于Object创建对象 所有的对象都是继承自Object的,因此我们可以从Object着手创建对象. //通过new 关键字创建对象 var person = new Ojbect(); person.name = 'yuhualinfeng' ; person.age = 30 ; person.job = 'web developer' ; //通过对象字面量创建对象 var person = {}; person.name = 'yuhualinfeng' ; person.age = 30 ; person.job = 'web developer' ; 基于Object创建对象有两种形式,一种是使用new关键字,另一种是使用对象字面量. 使用这种方式创建对象的缺点是:当创建多个相同类型的对象时,会产生许多重复的代码,假如我要三个person对象,我就需要写三相同结构的代码,为了解决这个问题,我们引入了工厂模式创建对象. 使用工厂模式创建对象 工厂模式是软件工厂领域一种广为认知的设计模式,这种模式抽象了创建具体对象的过程. function

原型模式

我的未来我决定 提交于 2020-03-17 04:44:32
在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效。 1.原型模式的定义和特点 定义 :用一个已经创建的实例做为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。 特点 :高效 2.原型模式的结构和实现 2.1原型模式的结构 java中提供了对象的clone()方法,所以实现原型模式很简单,原型模式包含以下主要角色: 抽象原型类 (Cloneable):规定了具体原型对象必须实现的接口 具体原型类 :实现抽象原型类的clone()方法,它是可被复制的对象 访问类 :使用具体原型类中的clone()方法来复制对象 结构图 : 2.2原型模式的实现 java引用不仅仅有基本数据变量,还有引用变量,所以将原型模式分两种克隆模式: 浅克隆 :仅仅克隆基本数据类型变量,而不克隆引用类型变量 深克隆 :即克隆基本数据类型变量,也克隆引用类型变量 2.2.1 浅克隆 Java中的Object类提供了浅克隆的clone()方法,具体原型类只要实现Cloneable接口就可实现对象的浅克隆,cloneable类就是抽象原型类。 1.具体抽象类 public class RealizeType implements Cloneable { private String name ; private Student

源码浅析2--奇技淫巧

一个人想着一个人 提交于 2020-03-17 03:55:46
本篇是系列第二篇,标题起得有点大,希望内容对得起这个标题,这篇文章主要总结一下在 jQuery 中一些十分讨巧的 coding 方式,将会由浅及深,可能会有一些基础,但是我希望全面一点,对看文章的人都有所帮助,源码我还一直在阅读,也会不断的更新本文。 即便你不想去阅读源码,看看下面的总结,我想对提高编程能力,转换思维方式都大有裨益,废话少说,进入正题。 短路表达式 与 多重短路表达式 短路表达式这个应该人所皆知了。在 jQuery 中,大量的使用了短路表达式与多重短路表达式。 短路表达式:作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。这是这两个操作符的一个重要属性。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 // ||短路表达式 var foo = a || b; // 相当于 if (a){ foo = a; } else { foo = b; } // &&短路表达式 var bar = a && b; // 相当于 if (a){ bar = b; } else { bar = a; } 当然,上面两个例子是短路表达式最简单是情况,多数情况下,jQuery 是这样使用它们的: 1 2 3 4 5 6 7 8 9 // 选自 jQuery

jquery学习笔记---插件开发模式和结构

被刻印的时光 ゝ 提交于 2020-03-16 10:51:49
JQuery插件开发 http://www.cnblogs.com/damonlan/archive/2012/04/06/2434460.html github教程 :https://github.com/i5ting/How-to-write-jQuery-plugin jQuery插件开发 一般来说,jQuery插件的开发分为两种:一种是挂在jQuery命名空间下的全局函数,也可称为静态方法;另一种是jQuery对象级别的方法,即挂在jQuery原型下的方法,这样通过选择器获取的jQuery对象实例也能共享该方法。 一、 在讲解jQuery插件基本结构和模式前,先介绍下两个重要的方法,还有不知啥原因,代码无法折叠,导致整体篇幅稍微有点长,阅读时请加点耐心: 1、$.extend(target, [object1], [objectN]) 该方法主要用于合并两个或更多对象的内容(属性)到第一个对象,并返回合并后的第一对象。如果该方法只有一个参数target,则该参数将扩展jQuery的命名空间,即作为静态方法挂在jQuery全局对象下,如jQuery里的$.ajax、$.getJSON全局函数等: // 将hello方法挂在jquery全局对象下,作为静态方法 $.extend({ hello: function() {alert("hello");} }); 又如

原型模式

前提是你 提交于 2020-03-15 07:46:39
我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。如果按照字面意思来理解,那么prototype就是通过调用构造函数而创建的那个对象实例的原型对象。使用原受对象的好处是可以让所有对象实例共享它所包含的属性和方法。换句话说,不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中,如下面的例子所示。 function Person(){ Person.prototype.name = "china"; Person.prototype.age = 2; } var person1 = new Person(); console.log(person1.name) console.log(Person.prototype.isPrototypeOf(person1)); person1._proto_ == Person.prototype //true Person.prototype.constructor == Person //true 来源: https://www.cnblogs.com/cnundefined/p/7111084.html

原型模式(Prototype)

落花浮王杯 提交于 2020-03-12 05:28:23
原型模式 原型模式是为了更方便创建相类似的对象的一种创造型模式, 使用原有的对象通过克隆(深或浅)获得新的对象 使用情况 在创建新对象成本较大 一般结构如下: Java语言的实现 浅克隆~ java语言的所有对象继承自java.lang.Object,在Object类中提供了一个clone方法,可以将一个java对象克隆一份。需要注意的是,能够实现克隆的类必须实现一个标记接口Cloneable,表示该类的对象支持被复制。在没有实现接口的前提下调用clone方法,java编译器会抛出一个CloneNotSupported的异常 一般而言,java的clone()须满足下面条件 a.克隆对象与原型对象不是同一个对象 b.类型一样 c.equals()方法返回true PS:在覆盖的clone()方法必须调用父类的clone()方法(super.clone()) 使用clone()方法只能达到浅克隆的效果,返回的对象之中的引用类型指向的是同一块内存 深克隆~ 在深克隆中,无论原型对象的成员变量的值还是引用类型,都将复制一份给克隆对象 在java中,深克隆通过序列化和反序列化实现(序列化Serialization就是将对象写入流的过程),写入流中的对象是原有对象的一个复制品,原有对象依然存在内存中,所以,将写入的对象再从流里面读出来,就可以实现深克隆 能够实现序列化的对象

Javascript原型模式总结梳理

折月煮酒 提交于 2020-03-12 04:21:17
  在大多数面向对象语言中 ,对象总是由类中实例化而来 ,类和对象的关系就像模具跟模件一样。Javascript中没有类的概念,就算ES6中引入的class也不过是一种语法糖,本质上还是利用原型实现。在原型编程语言中,类并不是必需的,对象不一定需要由类实例化而来,而是通过克隆另外一个对象来得到。   原型模式是用来创建对象的一种模式。在以类为中心的语言中,要创建一个对象首先要指定这个对象的类型,然后实例化一个对象。使用原型模式创建对象时不必关心对象的具体类型,而是找到一个对象,然后通过克隆来创建一个一模一样的对象。所以在前者中如果要根据一个对象创建多个相同的对象,我们需要先保存这个对象的所有属性信息,然后将属性信息设置到新创建的对象上,而在原型模式中我们只需要使用克隆就能完成同样的功能。   在某些玄幻小说中经常会出现某些修真大能,以分身的形式游走世间。这个过程很适合原型模式的应用: function Master(){ this.blood = 100; this.level = 6; } var noumenon = new Master(); noumenon.level = 9; var ektype = Object.create(noumenon); console.log(ektype);   ES5提供了原生的克隆方法:Object.create

创建型模式--原型模式

依然范特西╮ 提交于 2020-03-09 11:46:09
原型模式   原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种模式实现了一个原型接口,该接口用于创建当前对象的克隆。当创建对象的代价比较大时,则采用这种模式。 介绍    意图 :用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。    主要解决 :在运行期建立和删除原型。   何时使用:1、当一个系统应独立于它的产品创建,构成和表示时。2、当要实例化的类是在运行时刻指定时,例如,通过动态加载。3、为了避免创建一个与产品类层次平行的工厂类层次时。4、当一个类的实例只能有几个不同状态中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便。   如何解决:利用已有的一个原型对象,快速地生成和原型对象一样地实例。    关键代码 :1、实现克隆操作,在JAVA 中继承 Cloneable ,重写Clone()。2、原型模式同样用于隔离类对象地使用者和具体类型(易变类)之间地耦合关系,它同样要求这些“易变类”拥有稳定的接口。   应用实例:1、细胞分裂。2、JAVA 中的Object clone() 方法。   优点:1、性能提高。2、逃避构造函数的约束。   缺点:1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象

js 面向对象

主宰稳场 提交于 2020-03-08 07:55:20
1.对象的表现形式 // new Object() var person = new Object(); person.name = "sdf"; person.age = "23"; person.job = "Enginer"; person.sayName = function () { alert(this.name) } person.sayName(); //对象字面量模式 var person = { name: "sdf", age: 23, job: "Enginer", sayAge: function () { alert(this.age) } } person.sayAge();   Reflection:如果有多个对象需要创建多次 2.创建对象工厂模式 func:解决了创建多个对象模式,但是没有解决对象识别的问题(即怎么知道一个对象的类型) function creatPerson(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 = creatPerson("Nicholas", 23, "Enginer"

原型模式

萝らか妹 提交于 2020-03-08 06:58:07
原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。 原型模式,就是将一个原型对象传递给要发动创建行为的对象,要发动创建行为的对象调用原型对象的拷贝方法来实现对象的创建。它属于创建型模式,特殊的是原型类本身就是工厂,克隆方法就是工厂方法。在Java中,Object类提供了clone方法,来实现对象的克隆。自定义类可以重新实现该方法。需要注意的是,如果一个类需要被克隆,那么它需要实现Cloneable接口(一个空接口,只做标记),否则调用clone方法将抛出异常。一般情况下,clone对象和源对象满足下列条件: clone对象和源对象是不同对象,即A!=A1。他们在内存中,占用不同的地址。 具有相同的类型,即A.class == A1.class 如果equals方法定义正确,A.equals(A1) 这里存在一个问题,如果A的类型成员中,包含引用类型,那么clone得到的A1中的相应成员将会和源对象A中的成员指向同一个对象。问题引出了浅clone和深clone。 浅clone和深clone都回得到一个新对象 对于值类型的成员两种clone的效果相同 对于引用类型的成员,浅clone得到的是同一个地址的引用,深clone得到的是一个新对象地址的引用 深clone可以通过序列化实现