版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/running_shuai/article/details/88685455
javascript设计模式
Web2.qq.com. web2.0兴起的时候,(2019年1月1日已经下架)
map.baidu.com
编程功底,性能优化,html5游戏(取代flash)
1、设计模式概念
(1)文字解读:反复使用,思想成熟,经过分类,无数实战设计经验总结的。
为了代码可复用,可扩展 可解耦,可维护,更好的被人理解且保证代码可靠。
代码开发工程化。
(2)拟物化解读:分类书柜,编程开发语言是由人设计的,要跟生活和经验相结合。
2、设计模式的发展以及在javascript中的使用
发展:四人帮,简称gof,设计模式的圣经。
javascript的使用:
面向对象编程:原来没有class这个关键字
3、设计原则: 站在巨人的肩膀上蒸屉hold系统架构
(1)开闭原则:对扩展开放,对修改关闭,拟物(高考试卷,可以扩展题目,但不可修改题目)
(2)里氏转换原则:子类继承父类,单独调用完全可以,拟物(盗版光盘,完全可以单独用)
(3)依赖倒转原则:引用一个对象,如果这个对象有底层类型,直接饮用底层。
拟物(和尚打水,完全可以直接把井里的水杯回家,单你非要中间把水打出来放进一个桶里插一步)
(4)接口隔离原则:每一个接口都应该是一种角色,拟物(汽车的usb接口,只提供单5一功能)
(5)合成复用原则:新的对象应使用一些已有的对象,使之成为新对象的一部分。拟物(
手机有些相机零件,没必要再买个新相机)。
(6)迪米特原则(最小知道原则):一个对象应该对其他对象有可能少的了解。拟物(现实中的对象)
4、工厂模式:
(1)解读
文字解读:
定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。这种模式将类的实例化
推迟给了子类。而子类可以重写接口以便创建的时候制定自己的对象类型(抽象工厂)
拟物化解读:现实中的总工厂,有做衣服的子厂,有做鞋的子厂,我的总工厂给厂长留一个接口
用户跟厂长沟通,你要用工厂产什么东西,我是厂长,我去告诉下面的子厂做什么样的事情。是在厂
长用的时候,才开始找对应的子厂生产相应的产品。这个工厂只要暴漏出来一个接口,可以造鞋,我
可以添加工艺造一个小工厂,只要你提供原材料,这个就叫做抽象工厂。
(2)作用以及注意事项
对象的构建十分复杂。 对于我们一个人来说,我们想要双鞋,自己做特别复杂,我们只要跟厂长说我要做鞋,厂长代理子厂开始工作,给我们做鞋,如果不满意我们可以提供工艺,做一双我们想要的鞋。
需要依赖具体的环境创建不同的实例。跟厂长沟通,我现在的鞋是什么样的场景,就会选择不同的子厂。
处理大量具有相同属性的小对象。我要一双鞋,一卡车运一双鞋。不科学,我要一批鞋,用卡车运,科学。考虑用工厂帮我们解决。
注意事项:
不能滥用工厂,增加代码复杂度
(3)实际应用
创建对象的流程赋值的时候,比如依赖很多配置文件。
(4)面向对象代码实现:
```javascript
<script>
// 简单工厂工厂应该有厂长,(接口,消费者==子类)来决定到底运行那条产品线,即子类决定具体实例化哪个类。
var factory = {};
factory.generateShoes = function (){
this.people = 50;
alert(‘我们有’+this.people)
}
factory.generateClothes = function () {
}
factory.generateCars = function () {
}
factory.manager = function (prarms) {
// 工厂单例, 构造器模式
return new factory[params]
}
var me = factory.manager(‘generateShoes’)
</script>
抽象工厂(覆盖掉原来的工厂)
```javascript
<script>
var factory = {}; // 这是一个抽象工厂模式
factory.prototype = {
// 抽象工厂对象的原型上有个创建工厂的方法,它不能被实例化,只能用来派生子类(继承的模式)
createFactory: function (){ // 这是留出来的一个口子,
return new Error(’this is an abstract class’)
}
}
继承工厂的属性和方法:
var factoryHander = function (){
factory.call(this)
}
factoryHander.prototype = new factory();
factoryHander.prototype.constructor = factory;
factoryHander.prototype.createFactory = function (){
// 重新定义接口
}
</script>