原型设计

Head First设计模式之目录

风格不统一 提交于 2020-03-18 07:33:41
一、定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。 二、结构图 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。 重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。 三、实现 namespace DesignPatterns.Prototype { class Program { static void Main(string[] args) { List<string>

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

岁酱吖の 提交于 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

源码浅析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源码浅析2–奇技淫巧

旧街凉风 提交于 2020-03-17 03:55:19
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美。 其结构明晰,高内聚、低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷、渐进增强)优雅的处理能力以及 Ajax 等方面周到而强大的定制功能无不令人惊叹。 另外,阅读源码让我接触到了大量底层的知识。对原生JS 、框架设计、代码优化有了全新的认识,接下来将会写一系列关于 jQuery 解析的文章。 我在 github 上关于 jQuery 源码的全文注解,感兴趣的可以围观一下。jQuery v1.10.2 源码注解 。 本篇是系列第二篇,标题起得有点大,希望内容对得起这个标题,这篇文章主要总结一下在 jQuery 中一些十分讨巧的 coding 方式,将会由浅及深,可能会有一些基础,但是我希望全面一点,对看文章的人都有所帮助,源码我还一直在阅读,也会不断的更新本文。 即便你不想去阅读源码,看看下面的总结,我想对提高编程能力,转换思维方式都大有裨益,废话少说,进入正题。 短路表达式 与 多重短路表达式 短路表达式这个应该人所皆知了。在 jQuery 中,大量的使用了短路表达式与多重短路表达式。 短路表达式:作为”&&”和”||”操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值

jQuery源码浅析2–奇技淫巧

偶尔善良 提交于 2020-03-17 03:54:30
http://www.cnblogs.com/coco1s/p/5303041.html @ChokCoco 最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美。 其结构明晰,高内聚、低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷、渐进增强)优雅的处理能力以及 Ajax 等方面周到而强大的定制功能无不令人惊叹。 另外,阅读源码让我接触到了大量底层的知识。对原生JS 、框架设计、代码优化有了全新的认识,接下来将会写一系列关于 jQuery 解析的文章。 我在 github 上关于 jQuery 源码的全文注解,感兴趣的可以围观一下。jQuery v1.10.2 源码注解 。 本篇是系列第二篇,标题起得有点大,希望内容对得起这个标题,这篇文章主要总结一下在 jQuery 中一些十分讨巧的 coding 方式,将会由浅及深,可能会有一些基础,但是我希望全面一点,对看文章的人都有所帮助,源码我还一直在阅读,也会不断的更新本文。 即便你不想去阅读源码,看看下面的总结,我想对提高编程能力,转换思维方式都大有裨益,废话少说,进入正题。 短路表达式 与 多重短路表达式 短路表达式这个应该人所皆知了。在 jQuery 中,大量的使用了短路表达式与多重短路表达式。 短路表达式:作为”&&”和”||”操作符的操作数表达式

jQuery源码浅析–整体架构

独自空忆成欢 提交于 2020-03-17 03:52:29
http://www.cnblogs.com/coco1s/p/5261646.html @ChokCoco 最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美。 其结构明晰,高内聚、低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷、渐进增强)优雅的处理能力以及 Ajax 等方面周到而强大的定制功能无不令人惊叹。 另外,阅读源码让我接触到了大量底层的知识。对原生JS 、框架设计、代码优化有了全新的认识,接下来将会写一系列关于 jQuery 解析的文章。 我在 github 上关于 jQuery 源码的全文注解,感兴趣的可以围观一下。jQuery v1.10.2 源码注解(https://github.com/chokcoco/jQuery-) 。 网上已经有很多解读 jQuery 源码的文章了,作为系列开篇的第一篇,思前想去起了个【深入浅出jQuery】的标题,资历尚浅,无法对 jQuery 分析的头头是道,但是 jQuery 源码当中确实有着大量巧妙的设计,不同层次水平的阅读者都能有收获,所以打算厚着脸皮将自己从中学到的一些知识点共享出来。打算从整体及分支,分章节剖析。本篇主要讲 jQuery 的整体架构及一些前期准备,先来看看 jQuery 的整体结构: 整体架构 不同于 jQuery

JavaScript面向对象

限于喜欢 提交于 2020-03-15 23:19:50
概念 OO:Object Oriented(面向对象,详细概念见区别) OOP(Program)面向对象编程 OOD(Design)面向对象设计 OOA(Analysis) 区别 面向过程 关注方法步骤 在分析问题时,提取出解决问题的方法和步骤,然后通过函数一步步实现,并依次调用 面向对象 (实质是对面向过程的进一步抽象) 关注对象本身 把要解决的问题中的数据和方法组织为一个整体(对象)来看待,是我们对现实事物的抽象。 注意: 面向过程和面向对象这两种编程方式,都是用来编写程序,解决我们实际需求以及问题的。 二者示例对比:开车 面向过程的开车:先打开车门,上车,系好安全带,把车钥匙插入,点火。。。。 面向对象的开车:找一个司机,开车 基本构成 对象 (具体) 问题域中关注的具体的某一事物(对象因关注而产生) 类 (抽象) 具有相同性质和行为的一组对象的抽象(分类) 在代码中起“模具”作用 大驼峰命名是类的标志(注意:并不是说只要大驼峰命名就是类,或者不使用大驼峰命名就不是类了,只是一种标志,便于开发者区分) 关系:类是对象的抽象,对象是类的实例。 所有对象都是类创建的,所以对象又称为实例对象。用类创建对象的过程叫做实例化。 ES6语法糖 //ES6 class----模版 class Person { constructor(name, age, gender) { this

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-11 16:31:05
1:参照此文理解js的静态方法与实例方法 https://www.cnblogs.com/faithZZZ/p/7045323.html 以下是我结合jquery设计的原理的一些理解 var Fn=function(){        //【注意】用this定义出来的属性和方法是在prototype里的          this.a=10;          this.add=function(){          console.log('add');          }        } //给Fn添加静态属性和方法,这些静态属性和方法只有Fn才能引用到 //jquery的$就是一个类似Fn的方法,$.trim()就是$的一个静态方法。 Fn.age=18; Fn.trim=function(){ console.log('trim'); } console.log(Fn.trim); //给Fn添加实例属性和方法,这些实例的属性和方法只有实例出来的对象(new出来的对象)才有 //jquery中的addClass也是这样添加的,$('span') 调用$方法,传参'span'会返回一个实例对象出来 Fn.prototype.name='penny'; Fn.prototype.addClass=function(){ console.log('addClass'); }

原型模式

萝らか妹 提交于 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可以通过序列化实现