蛀牙--《设计模式---通往未来的很高的台阶之(三)》
来源:互联网 发布:傲剑紫霞神功数据 编辑:程序博客网 时间: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设计模式与开发实践》一书提供的知识
我不是巨人,我只是站在了巨人的肩膀上
人之所以人小是因为还有缺陷,之所以又变得强大,是因为克服了自己的缺陷 ———《蛀牙》
- 蛀牙--《设计模式---通往未来的很高的台阶之(三)》
- 蛀牙--《设计模式---通往未来的很高的台阶之(一)》
- 蛀牙--《设计模式---通往未来的很高的台阶之(二)》
- 蛀牙--《设计模式---通往未来的很高的台阶之(四)》
- 蛀牙--《设计模式---通往未来的很高的台阶之(五)》
- 蛀牙--《设计模式---通往未来的很高的台阶之(六)》
- 通往幸福的九级台阶
- [软件人生]苦难与蜕变——心性修炼是通往高手之路的第一个台阶[ZT]
- 转载:苦难与蜕变——心性修炼是通往高手之路的第一个台阶
- 代码脏乱的“蛀牙”效应
- 一张通往“三体世界”的地图
- 转:IT恐怖战国:通往终极垄断的最后几级台阶
- 我们的目标是:没有蛀牙!
- 拔掉那颗蛀牙的红警
- 设计模式之不简单的工厂模式(三)
- 通往理想之路的书单
- 通往5G之路的常见问题
- 通往C的巅峰之路
- java内存分配详解
- simplexml_load_string()返回的对象属性值获取问题
- Scala详细环境安装与配置
- shell编程-流程控制-case语句
- 基础能力-加解锁
- 蛀牙--《设计模式---通往未来的很高的台阶之(三)》
- 使用Gson处理解析泛型类型对象
- 怎样在bug管理上节省时间
- html 标签记录
- 解决centos7 +tomcat8 启动过慢的方法
- AlarmManager定时器发送一个延时广播
- Kotlin初体验--环境搭建与Hello Word
- 自己碰到的问题,记录一下
- Spring Mybatis 配置、多数据源配置(数据源动态匹配问题)