适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中

场景

假设在项目中我们原本使用了Swiper这个组件,使用方式如下:

  1. <swiper :prop-x="px" :prop-y="py" :prop-z="pz" />

后来又有了一个功能更强大,性能更好的滑动组件——NbSwiper,使用方式如下:

  1. <nb-swiper :prop-x="px" :prop-yy="pz" :prop-z="pw" />

对比可以发现

Swiper NbSwiper 组件data
prop-x prop-x px
prop-y py
prop-z prop-yy pz
prop-z pw

现在需求是要把项目中所有的Swiper组件替换为NbSwiper如上表:

两个组件处理除了prop-x使用相同,另外几个属性prop-yprop-yyprop-z都有一定的区别。 如果直接在代码中一个一个的更改,工作量有点大,而且很难保证在处理一些兼容问题上不出现bug

适配器模式上场

要解决这个问题我们可以选择将Swiper作为一个装饰组件

  1. // Swiper.vue
  2. // 项目原本使用的Swiper组件会被替换掉,我们自己封装一个Swiper组件
  3. <template>
  4. <!-- 进行转换 -->
  5. <nb-swiper :prop-x="propX" :prop-yy="propZ" :prop-z="propW" />
  6. </tempalte>
  7. <script>
  8. export default {
  9. props: {
  10. // 接受原本Swiper的props和NbSwiper支持的props
  11. propX: String,
  12. propY: String,
  13. propYy: String,
  14. propZ: String,
  15. propW: String,
  16. }
  17. ...
  18. }
  19. </script>

现在我们的工作只需在代码中增加对NbSwiper的新属性值的兼容