持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
单例模式
单例模式是为了保证在一个进程中,某个类有且仅有一个实例。
export{}
class Window{
private static instance:Window;
private constructor(){}
public static getInstance(){
if(!Window.instance){
Window.instance = new Window();
}
return Window.instance;
}
}
//把Window做成单例
let w1=Window.getInstance();
let w2=Window.getInstance();
console.log(w1===w2);
/**
* 透明单例
* 客户端或者说使用者并不需要知道要按单例使用
*/
export{}
let Window = (function(){
let Window:Window;
let Window = function(this:Window){
if(window){
return window;
}else{
return (window = this);
}
}
return Window;
})();
let w1 = new (Window as any)();
let w2 = new (Window as any)();
console.log(w1===w2);
应用场景:
- common.js
- jquery
- bootstrap模态窗口
- store 缓存
适配器模式
- 适配器模式又称包装器模式,将一个类的接口转化为用户需要的另一个接口,解决类(对象)之间接口不兼容的问题
- 旧的接口和使用者不兼容
- 中间加一个适配器转换接口
//这是需要被适配的类
class Socket{
output(){
return '220V';
}
}
abstract class Power{
abstract charge():string;
}
class PowerAdaptor extends Power{
constructor(public Socket:Socket){
super();
}
charge():string{
retrun this.Socket.output()+'转换为24V';
}
}
let adaptor = new PowerAdaptor(new Socket());
console.log(adaptor.charge());
应用场景:
- axios (判断浏览器和node端后进行适配)
- toAxiosAdaptor:如将jquery的$.ajax转化为toAxiosAdaptor
- promisify
- computed:如小写转大写
- tree:如将树形结构转为一维数组
- Sequelize
观察者模式
- 被观察者供维护观察者的一系列方法
- 观察者提供更新接口
- 观察者把自己注册到观察者里
- 在被观察者发生变化时候,调用观察者的更新方法
场景:
- 事件绑定
- promise