持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情
前言
今天我们来一起聊一下桥接模式的前世今生。
首先,我们先来看一下桥接模式到底是何方人士,有什么神通值得我们来探索。
桥接模式:在系统沿着多个维度变化的同时,又不增加其复杂度并已达到解耦。
从概念上来看,还挺抽象的,完全不知道桥接模式到底是个什么东西,有什么用途。接下来,我们就一起走进桥接模式的具体应用场景,来深入的了解一下。
神游应用场景
新的一周,我们接到了产品下发的需求,进行一款微信小游戏的开发——仿坦克大战。
我小时候玩这个游戏贼溜,现在要仿这个游戏也是激情满满,干劲十足。一番折腾之后,发现每个坦克的物理属性和动作单元具有一定的相似性,我们可以通过对相同的逻辑做抽象提取,保证代码复用率更高。
坦克移动属性提取
每个坦克都是以一定的速度进行匀速移动,区别是每个坦克的移速不相同而已。另外,每个坦克都支持向上、下、左、右四个方向移动,所以,每个坦克要支持移动方向的调整,其实就是二维坐标系中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);
}
这样其实,我们就可以实现每个坦克的随机出现,并以随机速度按照一定的方向移动。这样的话,地图中的每一个坦克的出现,我们都可以复用这套逻辑。
当我们创建了很多个这样的通用属性之后,并将不同的属性按照一定的规则进行组合成不同的对象,从而保证对象具有完整的功能。通过这种方式实现的对象耦合度很低,代码复用率高,而且很容易进行维护。这种抽取公共单元的模式其实就是我们今天的主角——桥接模式。
总结
我们再来一起看一下桥接模式的好处,进而可以深入的了解桥接模式。桥接模式的最大特点即是将对象和对象属性进行解耦,从而实现抽象层和实现层的解耦,增加代码的可维护性。
好了,有关桥接模式的内容我们今天就聊到这里了,希望对大家有所帮助。
欢迎大家在下方留言交流哟!