蛀牙--《设计模式---通往未来的很高的台阶之(三)》

来源:互联网 发布:傲剑紫霞神功数据 编辑:程序博客网 时间:2024/04/28 21:54

封装

前言:封装的目的是将信息隐藏。一般来说我们讨论的封装都是封装数据和封装实现。这篇文章我们将讨论更广义的封装。

1、封装数据:

js只能够依赖变量的作用域来实现封装

var myObject = function(){    var _name = "sven";    return{        getName:function(){            return _name;        }    }}console.log(myObject.getName());  //输出svenconsole.log(myObject._name);  //输出undefined

我们通过函数作用域 将_name变量 包裹
并且通过return将 方法公开 这样就可以通过 myObject.getName() 访问到变量 _name了

这是对数据的一种保护,但是封装不等同于封装数据。封装的目的是将信息隐藏,所以从广义上讲,封装还可以封装实现细节、设计细节以及隐藏对象的类型等。

封装有神魔好处类:
封装使得对象之间的耦合便松散,对象之间通过暴露API接口来实现通信。

2、封装类型

晃点你们的 封装确实有封装类型的概念 那是相对于静态类型语言来说的 但是js是一门类型模糊的语言,在封装类型这一方面js是没有能力的。

3、封装变化

从设计模式的角度上来说,封装的更重要的层次体现为封装变化。。。

通过封装变化的方式,把系统中稳定不变的部分和容易变化的部分隔离出,在系统演变的过程中,我门只需要改变容易变化的部分,如果这些部分是已经封装好的,替换起来也相对容易。这可以对大程度的保证程序的稳定性和可扩展性。

原型模式和原型继承

从这里开始我们就 正式介绍第一个设计模式 ——-原型模式:

1、使用克隆的原型模式:

逃出克隆岛 这部电影不知道大家看过没有 还是蛮有意思的推荐看一看

如果我们玩一款忍者游戏,忍者会分身,当忍者没有血了想着分身逃跑时,分身的血量状态等一定要和真身的一样,不然就让敌人分辨出来了。

如果使用原型模式来实现,只需要调用负责克隆的方法clone,便能完成同样的功能

var Renzhe = function(){    this.blood = 100;    this.attackLevel = 1;    this.defenseLevel = 1;};var renzhe = new Renzhe();renzhe.blood = 200;renzhe.attackLevel = 2;renzhe.defenseLevel = 2;var clonerenzhe = Object.create(renzhe);console.log(clonerenzhe );//Object{blood:200,renzhe.attackLevel = 2;renzhe.defenseLevel = 2;}

Object.create方法是ES5提供的可以用来克隆对象的。

克隆只是创建对象的手段,但是实际应用中我们可能并不想得到一个一抹一样的对象,而是通过一种便捷的方式去创建某个类型的对象。

2、原型编程规范的一些规则。

原型链是很有用处的,我们体验下Io语言就知道了:

Io语言是一门基于原型的语言,Io语言没有类的概念,每一个对象都是基于另外一个对象的克隆。这里写图片描述

Animal :=Object clone //现在通过克隆对象Object得到了新的Animal对象Animal maskSound :=method("animal maskSound" print);//让所有的动物都会叫Dog := Animal clone  //所有动物都会叫了  在创建个狗Dog eat = method(" dog eat " print); //让狗能吃东西 

现在 我们已经搭建好了一个动物世界
愈发的感觉自己像个上帝 啊
这里写图片描述

接下啦我们调用:::

Animal makeSound   //输出animal makeSoundDog eat  //输出dog eat

在上面的例子中,object是Animal的原型对象,Animal是Dog的原型对象,这就形成了一个原型链。
这时,在Io的解释器中执行Dog makeSound时,Dog对象并没有makeSound方法,于是把请求委托给了他的原型Animal,Animal是有这个方法的,所以这条语句能顺利输出,这里就偷懒不写了。

在原型编程中一个重要的特性就是,当当前对象无法响应某个请求时,会把该请求委托给他自己的原型

前方高能预警————–=================我就是图片================

由上可以知晓,原型编程泛型应该具有一下的几种基本规则:

  • 所有数据都是对象
  • 要得到一个对象,不是通过实例化类,而是通过找到一个对象作为原型并克隆他
  • 对象会记住他的原型
  • 如果对象无法响应某个请求,他会把这个请求委托给自己的原型

js中的原型继承—–回见

感谢《JavaScript设计模式与开发实践》一书提供的知识

我不是巨人,我只是站在了巨人的肩膀上

人之所以人小是因为还有缺陷,之所以又变得强大,是因为克服了自己的缺陷 ———《蛀牙》

阅读全文
1 0
原创粉丝点击