JS设计模式——设计模式概论


前言

在了解设计模式后,发现它起始没有那么高大上,有些是我们平时开发中已经用到的东西(更好的设计模块,组织共同的代码),它只是给这些好用的代码模式起了一个名字而已。


一、设计模式

项目/功能 = 模块 + 沟通;

1. 设计模式扮演的角色

1. 帮助我们组织模块(通过一些设计模式,组织模块间的组成结构);
2. 帮助我们设计沟通(有的设计模式可以帮助我们设计模块间如何沟通);
3. 提高代码质量(通过设计模式,让代码更加优雅);

2. 程序设计原则

1. 开闭原则(我们的程序对扩展开放,对修改关闭。);
2. 单一职责原则(模块只做一件事情,它的职责越单一越好);
3. 依赖倒置原则(上层模块不依赖具体的下层模块,而应该依赖抽象层);
//依赖倒置原则(上层模块不依赖具体的下层模块,而应该依赖抽象层)代码实例

//假设有四种菜,一个点单类

//1.点单依赖菜的代码(有几种菜,点单上就忒有几种方法,当菜发生变动时,点单上的方法也要发生变动)
function food1() {}
function food2() {}
function food3() {}
function food4() {}

function order() {}
order.prototype.orderFood1 = function() {}
order.prototype.orderFood2 = function() {}
order.prototype.orderFood3 = function() {}
order.prototype.orderFood4 = function() {}


//2.在菜和点单中间,抽象出一个餐馆层的代码(这样菜无论怎么变动都不会影响我们的点单,我们只需要改变一下抽象层餐馆)
function food1() {}
function food2() {}
function food3() {}
function food4() {}

function resturn(food) {	//餐馆
	var list = {	//类似菜单
		food1: new food1(),
		food2: new food2(),
		food3: new food3(),
	}
	return list[food];
}
function order(food) {	//点单
	return resturn(food);
}

4. 接口隔离原则(接口应该细化,功能应该单一,不要一个接口调用太多方法);
5. 迪米特法则/最少知识原则(两个对象之间产生沟通,但两个对象没有必要互相非常了解);
6. 里氏替换原则(关注点在“继承”,子类继承父类时,要保证完全继承父类的属性和方法,这样父类使用的地方,子类可以替换);

3. 设计模式的分类

1. 创建型(这些设计模式可以帮助我们优雅地创建对象);
	1.1. 工厂模式——大量创建对象;
	1.2. 建造者模式——精细化组合对象;
	1.3. 单例模式——全局只能有我一个;
	1.4. 原型模式——JavaScript的灵魂;
2. 结构型(帮助我们优雅地设计代码结构);
	2.1. 外观模式——给你一个套餐;
	2.2. 适配器模式——用适配代替更改;
	2.3. 装饰者模式——更优雅地扩展需求;
	2.4. 享元模式——共享来减少数量;
	2.5. 桥接模式——独立出来,然后再对接过去;
3. 行为型(模块之间行为的模式总结,帮助我们组织模块行为);
	3.1. 观察者模式——我作为第三方转发;
	3.2. 状态模式——用状态代替判断;
	3.3. 策略模式——算法工厂;
	3.4. 职责链模式——像生产线一样组织模块;
	3.5.  命令模式——用命令去解耦;
	3.6. 迭代器模式——告别for循环;
4. 技巧型(一些帮助我们优化代码的技巧);
	4.1. 链模式——链式调用;
	4.2. 委托模式——让别人代替你收快递;
	4.3. 数据访问模式——一个方便的数据管理器;
	4.4. 惰性模式——我要搞机器学习;
	4.5. 等待者模式——等你们都回来再吃饭;
5. 架构型(清晰的将一些子系统组合在一起);

总结

革命尚未成功,同志仍需努力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值