javaScript设计模式——桥接模式(九)

设计模式:有助于提高代码的复用性和可维护性

概念

桥接模式(Bridge),将抽象部分与实现部分分离,使他们可以独立的变化。
这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
桥接模式需要一个 桥,来连接抽象部分和实现部分

桥接模式,在系统中沿着多个维度变化,不仅不会增加系统的复杂度,还可以达到解耦的目的。

意图:将抽象与实现解耦

适用场景

事件监控

<body>
    <ul>
        <li data-id="1">用户一</li>
        <li data-id="2">用户二</li>
    </ul>
    <p id="content"></p>
</body>
<script>
    var lis = document.querySelectorAll('li')
    for(var i=0;i<lis.length;i++){
        lis[i].addEventListener('click',getUserById)
    }
    function getUserById(event){
        var id = event.target.dataset.id
        var xhr = new XMLHttpRequest()
        xhr.open('get',`/user/${id}`)
        xhr.onreadystatechange = function(){
            let user = xhr.response
            if(xhr.readyState == 4 && xhr.status == 200){
                document.getElementById('content').innerHTML = user.name
            }
        }
        xhr.send()
    }
</script>

但是上面代码有一个问题,就是getUserById需要event事件或者上下文,才能取得id, 而且还需要再获取dom,这样耦合太紧,需要拆分

function getUserByIdBridge(id){
     let id = this.dataset.id  //event.target.dataset.id
      getUserById(id,function(){
         document.getElementById('content').innerHTML = user.name
    })
}

function getUserById(id,callback){
      var xhr = new XMLHttpRequest()
        xhr.open('get',`/user/${id}`)
        xhr.onreadystatechange = function(){
            let user = xhr.response
            if(xhr.readyState == 4 && xhr.status == 200){
                callback(user)
            }
       }
        xhr.send()
  }

这样,明显代码模块,各个部分代码功能明确,耦合性大大降低,将监听器方法抽取出来,成为一个单独的API函数,而且保证该API函数与节点本身没有必然的耦合,就可以独立的运行getUserById这个函数。

桥接模式,就是把给抽象与现实对象搭一座桥,让对象方法即联系在一起,又是独立变化的,让代码耦合性降低的一种设计模式。

拓展

常用的12种设计模式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值