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

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

正文


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


1.1 定义


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


1.2 优点


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


1.3 缺点


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


1.4 使用场景


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


1.5 链路类图


999999.png


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


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


结果:

1234.png

相关文章
|
5月前
|
设计模式 开发者
【设计模式】第七篇:和我一起简单认识桥接模式
实现的意思并不是指抽象的派生类,而是指通过组合来代替继承关系,从而降低抽象和具体实现产品两个可变换维度之间的耦合,就像我们的相机品牌和相机产品类型之间的分离
52 4
|
6月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Bridge(桥接模式)
【设计模式】JAVA Design Patterns——Bridge(桥接模式)
【设计模式】JAVA Design Patterns——Bridge(桥接模式)
|
6月前
|
设计模式
设计模式之桥接模式
设计模式之桥接模式
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
1月前
|
设计模式 PHP 开发者
PHP中的设计模式:桥接模式的解析与应用
在软件开发的浩瀚海洋中,设计模式如同灯塔一般,为开发者们指引方向。本文将深入探讨PHP中的一种重要设计模式——桥接模式。桥接模式巧妙地将抽象与实现分离,通过封装一个抽象的接口,使得实现和抽象可以独立变化。本文将阐述桥接模式的定义、结构、优缺点及其应用场景,并通过具体的PHP示例代码展示如何在实际项目中灵活运用这一设计模式。让我们一起走进桥接模式的世界,感受它的魅力所在。
|
2月前
|
设计模式 自然语言处理 算法
PHP中的设计模式:桥接模式的深入探索与应用
在PHP开发中,理解并运用设计模式是提升代码质量与可维护性的关键。本文聚焦于桥接模式——一种结构型设计模式,它通过封装一个抽象的接口,将实现与抽象分离,从而使得它们可以独立变化。不同于传统摘要的概述式表述,本文将以故事化的情境引入,逐步解析桥接模式的精髓,通过PHP代码示例详细展示其在实际项目中的应用,旨在为读者提供一个既深刻又易于理解的学习体验。
27 1
|
2月前
|
设计模式 Java
Java设计模式-桥接模式(9)
Java设计模式-桥接模式(9)
|
1月前
|
设计模式 Java
Java设计模式之桥接模式
这篇文章介绍了Java设计模式中的桥接模式,包括桥接模式的目的、实现方式,并通过具体代码示例展示了如何分离抽象与实现,使得两者可以独立变化。
44 0
|
3月前
|
设计模式 XML 存储
【七】设计模式~~~结构型模式~~~桥接模式(Java)
文章详细介绍了桥接模式(Bridge Pattern),这是一种对象结构型模式,用于将抽象部分与实现部分分离,使它们可以独立地变化。通过实际的软件开发案例,如跨平台视频播放器的设计,文章阐述了桥接模式的动机、定义、结构、优点、缺点以及适用场景,并提供了完整的代码实现和测试结果。桥接模式适用于存在两个独立变化维度的系统,可以提高系统的可扩展性和灵活性。
【七】设计模式~~~结构型模式~~~桥接模式(Java)
|
3月前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    43
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    48
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    58
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    38
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    63
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    58
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    42
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    50
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    110
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    78
  • 下一篇
    无影云桌面