【设计模式专题】用英雄联盟案例来讲解—桥接模式

🍍每日推荐

🍖文章开始之前我想首先介绍一下牛客,以便没有使用过的小伙伴能够快速入手,牛客网是国内最大的算法、面试、招聘网站,涵盖了多种大厂面试真题以及题解,里面大佬云集,各种题目的解决方案层出不穷,绝对能让你大开眼界,而且牛客是你在人生中不同的阶段都能对你有所帮助的编程软件(完全免费),如果感兴趣可以访问注册一下

访问链接:牛客-国内最大的刷题网站

一、为什么要使用桥接模式

1.1 定义

桥接模式(bridge):抽象与实现分离,二者可以独立变化,用组合关系代替继承关系,降低了耦合度

1.2 优点

降低耦合度,扩展性强,细节对客户透明

1.3 缺点

设计难度大,对系统要有深入的理解

1.4 使用场景

一个类有两个独立变化的维度

1.5 链路类图

v

二、桥接模式代码实现(常规写法)

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();
    }
}

结果:

在这里插入图片描述

🍍每日推荐

🍖文章开始之前我想首先介绍一下牛客,以便没有使用过的小伙伴能够快速入手,牛客网是国内最大的算法、面试、招聘网站,涵盖了多种大厂面试真题以及题解,里面大佬云集,各种题目的解决方案层出不穷,绝对能让你大开眼界,而且牛客是你在人生中不同的阶段都能对你有所帮助的编程软件(完全免费),如果感兴趣可以访问注册一下

访问链接:牛客-国内最大的刷题网站

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掂掂三生有幸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值