结构型设计模式之桥接模式

129 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

前言

今天我们来一起聊一下桥接模式的前世今生。

首先,我们先来看一下桥接模式到底是何方人士,有什么神通值得我们来探索。

桥接模式:在系统沿着多个维度变化的同时,又不增加其复杂度并已达到解耦。

从概念上来看,还挺抽象的,完全不知道桥接模式到底是个什么东西,有什么用途。接下来,我们就一起走进桥接模式的具体应用场景,来深入的了解一下。

神游应用场景

新的一周,我们接到了产品下发的需求,进行一款微信小游戏的开发——仿坦克大战。

image.png

我小时候玩这个游戏贼溜,现在要仿这个游戏也是激情满满,干劲十足。一番折腾之后,发现每个坦克的物理属性和动作单元具有一定的相似性,我们可以通过对相同的逻辑做抽象提取,保证代码复用率更高。

坦克移动属性提取

每个坦克都是以一定的速度进行匀速移动,区别是每个坦克的移速不相同而已。另外,每个坦克都支持向上、下、左、右四个方向移动,所以,每个坦克要支持移动方向的调整,其实就是二维坐标系中x、y坐标的不断变化而已。

好了,既然通用属性已经提炼出来了,那我们就进行一下伪代码实现:

    function Speed(x, y, speed) {
        this.x = x;
        this.y = y;
        this.xSpeed = 0;
        this.ySpeed = speed;
    }
    
    Speed.prototype.move = function () {
        this.x += this.xSpeed;
        this.y += this.ySpeed;
    }
    
    Speed.prototype.trun = function (x, y) {
        this.x = x;
        this.y = y;
    }

我们已经通过上面的伪代码实现了坦克的移动属性,我们接下来只需要为每个坦克挂载一下就ok了。

    function TankA () {
        new Speed(0, 0, 1);
    }
    
    function TankB() {
        new Speed(10, 0, 2);
    }

这样其实,我们就可以实现每个坦克的随机出现,并以随机速度按照一定的方向移动。这样的话,地图中的每一个坦克的出现,我们都可以复用这套逻辑。

当我们创建了很多个这样的通用属性之后,并将不同的属性按照一定的规则进行组合成不同的对象,从而保证对象具有完整的功能。通过这种方式实现的对象耦合度很低,代码复用率高,而且很容易进行维护。这种抽取公共单元的模式其实就是我们今天的主角——桥接模式。

总结

我们再来一起看一下桥接模式的好处,进而可以深入的了解桥接模式。桥接模式的最大特点即是将对象和对象属性进行解耦,从而实现抽象层和实现层的解耦,增加代码的可维护性。

好了,有关桥接模式的内容我们今天就聊到这里了,希望对大家有所帮助。

欢迎大家在下方留言交流哟!