文章目录
🍍每日推荐
🍖文章开始之前我想首先介绍一下牛客,以便没有使用过的小伙伴能够快速入手,牛客网是国内最大的算法、面试、招聘网站,涵盖了多种大厂面试真题以及题解,里面大佬云集,各种题目的解决方案层出不穷,绝对能让你大开眼界,而且牛客是你在人生中不同的阶段都能对你有所帮助的编程软件(完全免费),如果感兴趣可以访问注册一下
访问链接:牛客-国内最大的刷题网站
一、为什么要使用桥接模式
1.1 定义
桥接模式(bridge):抽象与实现分离,二者可以独立变化,用组合关系代替继承关系,降低了耦合度
1.2 优点
降低耦合度,扩展性强,细节对客户透明
1.3 缺点
设计难度大,对系统要有深入的理解
1.4 使用场景
一个类有两个独立变化的维度
1.5 链路类图
二、桥接模式代码实现(常规写法)
2.1 定义 位置路线接口 RoadAPI
/**
* @Author liuy
* @Description 英雄联盟位置路线接口
* @Date 2022/7/11 18:48
* @Version 1.0
*/
public interface RoadAPI {
//玩家选择的位置
void location();
}
2.2 实现RoadAPI
上路实现类:UpRoadService
/**
* @Author liuy
* @Description 上路实现类
* @Date 2022/7/11 17:51
* @Version 1.0
*/
public class UpRoadService implements RoadAPI {
@Override
public void location() {
System.out.println("走上路!");
}
}
中路实现类 MiddleRoadService
/**
* @Author liuy
* @Description 中路实现类
* @Date 2022/7/11 17:55
* @Version 1.0
*/
public class MiddleRoadService implements RoadAPI {
@Override
public void location() {
System.out.println("走中路!");
}
}
下路实现类 UpRoadService
/**
* @Author liuy
* @Description 下路实现类
* @Date 2022/7/11 17:54
* @Version 1.0
*/
public class DownRoadService implements RoadAPI {
@Override
public void location() {
System.out.println("走下路!");
}
}
2.3 创建英雄与路线桥接抽象类 >Hero
/**
* @Author liuy
* @Description 英雄与路线桥接抽象类
* @Date 2022/7/11 17:59
* @Version 1.0
*/
public abstract class Hero {
protected RoadAPI roadAPI;
//注入所选路线 => 桥接过程
public void initRoad(RoadAPI roadAPI) {
this.roadAPI = roadAPI;
}
//选择英雄启动游戏抽象方法
public abstract void game();
}
2.4 创建各个英雄类型继承Hero
EZ 伊泽瑞尔类
/**
* @Author liuy
* @Description 使用EZ开始游戏
* @Date 2022/7/11 18:09
* @Version 1.0
*/
public class Ez extends Hero{
//注入所选路线 => 桥接过程
@Override
public void initRoad(RoadAPI roadAPI) {
this.roadAPI = roadAPI;
}
//重写父类选择英雄启动游戏抽象方法
@Override
public void game() {
System.out.println("我要玩EZ");
//路线选择
roadAPI.location();
}
}
YaSuo 亚索类
/**
* @Author liuy
* @Description 使用亚索开始游戏
* @Date 2022/7/11 18:13
* @Version 1.0
*/
public class YaSuo extends Hero{
//注入所选路线 => 桥接过程
@Override
public void initRoad(RoadAPI roadAPI) {
this.roadAPI = roadAPI;
}
@Override
public void game() {
System.out.println("我要玩亚索");
//路线选择
roadAPI.location();
}
}
MangSeng 盲僧类
/**
* @Author liuy
* @Description 使用盲僧开始游戏
* @Date 2022/7/11 18:14
* @Version 1.0
*/
public class MangSeng extends Hero{
//注入所选路线 => 桥接过程
@Override
public void initRoad(RoadAPI roadAPI) {
this.roadAPI = roadAPI;
}
@Override
public void game() {
System.out.println("我要玩盲僧");
//路线选择
roadAPI.location();
}
}
2.5 编写测试类 测试桥接模式
/**
* @Author liuy
* @Description 测试英雄联盟桥接模式
* @Date 2022/7/11 18:25
* @Version 1.0
*/
public class Demo {
public static void main(String[] args) {
//选择EZ
Hero ezDownRoad = new Ez();
//EZ走下路
ezDownRoad.initRoad(new DownRoadService());
//确认选择 开始游戏(进入具体业务逻辑)
ezDownRoad.game();
//选择亚索
Hero yaSuoMiddleRoad = new YaSuo();
//亚索走中路
yaSuoMiddleRoad.initRoad(new MiddleRoadService());
//确认选择 开始游戏(进入具体业务逻辑)
yaSuoMiddleRoad.game();
//选择盲僧
Hero mangSengUpRoad = new MangSeng();
//盲僧走上路
mangSengUpRoad.initRoad(new UpRoadService());
//确认选择 开始游戏(进入具体业务逻辑)
mangSengUpRoad.game();
}
}
结果:
🍍每日推荐
🍖文章开始之前我想首先介绍一下牛客,以便没有使用过的小伙伴能够快速入手,牛客网是国内最大的算法、面试、招聘网站,涵盖了多种大厂面试真题以及题解,里面大佬云集,各种题目的解决方案层出不穷,绝对能让你大开眼界,而且牛客是你在人生中不同的阶段都能对你有所帮助的编程软件(完全免费),如果感兴趣可以访问注册一下
访问链接:牛客-国内最大的刷题网站