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

文章目录

  • 一、为什么要使用桥接模式
    • 1.1 定义
    • 1.2 优点
    • 1.3 缺点
    • 1.4 使用场景
    • 1.5 链路类图
  • 二、桥接模式代码实现(常规写法)
    • 2.1 定义 位置路线接口 RoadAPI
    • 2.2 实现RoadAPI
    • 2.3 创建英雄与路线桥接抽象类 >Hero
    • 2.4 创建各个英雄类型继承Hero
    • 2.5 编写测试类 测试桥接模式

每日推荐

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

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

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

1.1 定义

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

1.2 优点

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

1.3 缺点

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

1.4 使用场景

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

1.5 链路类图

【设计模式专题】用英雄联盟案例来讲解—桥接模式_第1张图片

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

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();
        //选择盲僧走上路
        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();
    }
}

结果:

【设计模式专题】用英雄联盟案例来讲解—桥接模式_第2张图片

每日推荐

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

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

你可能感兴趣的:(设计模式,原力计划,设计模式,桥接模式,java)