桥接模式 有以下三种使用场景:
1、事件监听回调机制的分离
2、特权函数(在作用域外部访问其内部私有成员变量的函数)
3、实现独立化单元
1、事件监听回调机制的分离
<button id="btn">按钮</button> // 获得按钮对象 var oBtn = document.getElementById('btn'); // 正常情况下我们是这样为元素添加事件的 oBtn.addEventListener('click', function(){ alert(this.innerHTML + ': 我被点击了'); // 如果我们如何对回调函数进行单元测试呢? }); // 使用 桥接模式 将回调函数分离出来 oBtn.addEventListener('click', bridge); // 桥接函数 function bridge(){ var target = this.innerHTML; clickEvent(target); } // 下面这个函数实现了 解耦 function clickEvent(target){ alert(target + ': 我被点击了'); }
2、特权函数(在作用域外部访问其内部私有成员变量的函数)
// 特权函数 var PublicClass = function(){ var name = '张三'; // 访问私有成员变量 this.getName = function(){ return name; }; }; var p1 = new PublicClass(); alert(p1.getName());// 张三 // 特权函数 var PublicClass = function(){ // 私有成员方法 var privateMethod = function(){ alert('执行了一个很复杂的操作...'); }; // 通过特权函数去访问这个私有的独立单元 this.bridgeMethod = function(){ return privateMethod(); }; }; var p1 = new PublicClass(); p1.bridgeMethod();// 执行了一个很复杂的操作... 3、实现独立化单元 // 独立化单元 var Class1 = function(a, b, c){ this.a = a; this.b = b; this.c = c; }; var Class2 = function(d, e){ this.d = d; this.e = e; }; // 用桥把多个单体组织到一起 var bridgeClass = function(a, b, c, d, e){ this.class1 = new Class1(a, b, c); this.class2 = new Class2(d, e); };