内容简介:说起桥接模式可能大家都多少觉得名字陌生,但是如果说解耦以及封装功能函数大家一定都不陌生,其实在我们写业务代码时已经在无形中多少使用这种设计模式了,只是没有注意到或者养成习惯要这样设计。桥接模式的主要特点就是将实现层与抽象层解耦分离,使得两部分独立变化。由此可以看出桥接模式主要是对结构之间的解耦,而抽象工厂模式和创建模式主要任务在于创建。比如我们需要在一个业务中原来的代码是这样的,代码非常简单,只是说明其思想是什么。
说起桥接模式可能大家都多少觉得名字陌生,但是如果说解耦以及封装功能函数大家一定都不陌生,其实在我们写业务代码时已经在无形中多少使用这种 设计模式 了,只是没有注意到或者养成习惯要这样设计。
桥接模式的主要特点就是将实现层与抽象层解耦分离,使得两部分独立变化。由此可以看出桥接模式主要是对结构之间的解耦,而抽象工厂模式和创建模式主要任务在于创建。
案例说明
案例一 解耦抽象出 工具 类(抽象类)
比如我们需要在一个业务中原来的代码是这样的,代码非常简单,只是说明其思想是什么。
// old codes let addNum = 5 ; let total = initNum + addNum ; let amount = 100 + addNum; console.log(`增加了${addNum}件衣服`); // extra codes let addNum = 9 ; let total = initNum + addNum ; let amount = 100 + addNum; console.log(`增加了${addNum}件鞋子`); //better codes 提取代码中的共同点,为公共函数,与具体的业务解耦,然后在原来的不同页面中分别调用 function addObjs(addnum,name){ let total = initNum + addNum ; let amount = 100 + addNum; console.log(`增加了${addNum}`件${name}); } let addNum = 5; addObjs(addNum,'衣服'); let addNum = 9; addObjs(addNum,'鞋子'); 复制代码
案例二 :多维化对象 && 组合
除了上面这种使用,其实多维的变化也是非常常见的使用场景。与上面解耦抽象与具体业务不同,这时的桥接是可以看做是用于组合不同的基本抽象类或者方法,然后组装成另一个对象或者类。
假设我们具有人这个类,但是后面发现人的类代码写多了会有两种场景困扰我们需要重构。
- 人下具有太多核心代码,维护比较困难
- 人下具有许多功能也是其他基本类具有的,或者说就是某些函数也是其他功能可以具有的
这时候,我们就会用桥接模式将不同的函数或者类桥接之后作为一个新的整体使用.
codepen代码地址:链接
class Animal{ constructor(name){ this.name = name || 'animal'; } run(){ console.log(`${this.name} can run`) } } function talk(){ console.log('talk in xx language') } function work(name){ console.log(`${name} can work`) } class Person{ constructor(name){ this.name = name ; this.animal = new Animal(this.name); this.talk = talk ; this.work = work.bind(this,this.name) ; } } let zhangsan = new Person('张三'); zhangsan.work(); zhangsan.talk(); zhangsan.animal.run(); 复制代码
以上所述就是小编给大家介绍的《结构型设计模式之桥接模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。