设计模式之Bridge——游戏篇

设计模式:Bridge模式 如果你想要写一个游戏,并且想让这个游戏同时支持PC和手机,那么怎么样的设计可以避免写两套代码,并且不影响可扩展性呢?说起来还是比较简单的,只要把对平台的依赖部分抽取成抽象的接口(比如说绘图部分),并且针对抽取出来的接口,分别实现PC版和手机版就行了。系统的其他部分只要调用那套抽取出来的接口就可以完成所有的功能。这样来看,系统的其他部分是不依赖具体的平台的,也就具有了良好的扩展性。这个就是Bridge模式的应用。 阅读详情

   今天从电子市场买来两张游戏碟,一张是三国游戏(SanGuoGame),一张是CS游戏(CSGame)。玩过游戏的人可能都知道,游戏对计算机系统(ComputerSystem)是有要求的,可能一个游戏在Windows98系统下能玩,到了Windows2000系统下就不能玩了,因此为了不走冤枉路,先看看游戏要求的计算机系统(ComputerSystem)可是一个好习惯呦!

 

好了,闲话少叙开始我们的游戏旅程吧:

1、  在这里,先定义计算机系统(ComputerSystem)接口类:

public interface ComputerSystem {

  public abstract void  playGame(); //玩游戏

}

2、  再定义对计算机系统(ComputerSystem)接口的具体实现类:

A:Windows98系统

public class Windows98 implements ComputerSystem{

  public void  playGame(){

    System.out.println("玩Windows98游戏!");

  }

}

B:Windows2000系统

public class Windows2000 implements ComputerSystem{

  public void  playGame(){

    System.out.println("玩Windows2000游戏!");

  }

}

3、  定义游戏(Game)类:

public abstract class  Game  {

  public abstract void play(); //玩游戏

 

  protected ComputerSystem getSetupSystem(String type) { //获得要安装的系统

    if (type.equals("Windows98")) { //如果游戏要求必须安装在Windows98下

      return new Windows98(); //使用Windows98系统

    }

    else if (type.equals("Windows2000")) { //如果游戏要求必须安装在Windows2000下

      return new Windows2000(); //使用Windows2000系统

    }

    else {

      return new Windows98(); //默认启动的是Windows98系统

    }

  }

}

4、  定义游戏(Game)类的子类:

A:三国游戏(SanGuoGame)

public class SanGuoGame extends Game {

  private ComputerSystem computerSystem;

  public SanGuoGame(String type) {//看游戏要求安装在那个系统上

    computerSystem = getSetupSystem(type);//那么使用这个系统

  }

 

  public void play() {//玩游戏

    computerSystem.playGame();

    System.out.println("我正在玩三国,不要烦我!");

  }

}

B:CS游戏(CSGame)

public class CSGame extends Game {

  private ComputerSystem computerSystem;

  public CSGame(String type) { //看游戏要求安装在那个系统上

    computerSystem = getSetupSystem(type); //那么使用这个系统

  }

 

  public void play() { //玩游戏

    computerSystem.playGame();

    System.out.println("我正在玩CS,不要烦我!");

  }

}

5、编写测试类:

public class Test  {

  public static void main(String[] args) {

    Game sanguo = new SanGuoGame("Windows98"); //游戏要求Windows98

    sanguo.play();

 

    sanguo = new SanGuoGame("Windows2000");//游戏要求Windows2000

    sanguo.play();

 

    Game cs = new CSGame("Windows98"); //游戏要求Windows98

    cs.play();

 

    cs = new CSGame("Windows2000");//游戏要求Windows2000

    cs.play();

  }

}

6、说明:

A:Bridge定义:将抽象和行为划分开来,各自独立,但能动态的结合。

B:从本例中我们可以看到,不同的游戏对系统的要求是不同的,三国和CS可能都需要Windows98系统,也可能需要Windows2000系统,甚至要求不相同的系统,因此处理这类问题,我们就可以用Bridge这种模式了。

      C:这里行为是指游戏,抽象是指系统!  

openlayers6【十九】vue HeatmapLayer热力图层实现热力图效果详解 文章目录1. 写在前面2. Heatmap 类实现热力图2.1 Heatmap 参数2.2 实现热力图3. 完整代码4. 添加删除map图层的方法5. 热力图自身的get,set方法 1. 写在前面 我们主要看热力图的效果,区域绘制效怎么设置详细内容可以访问 openlayers6【十七】vue VectorLayer矢量图层画地图省市区,多省市区(粤港澳大湾区)效果详解 在 openlayers 中,图层是使用 layer 对象表示的,主要有 WebGLPoints Layer、热度图(HeatMap L 阅读详情

相关推荐

Kaggle时间序列竞赛金牌方案解析与实战指南

本文深度解析了Kaggle时间序列竞赛的金牌方案,揭示了其成功不仅依赖先进模型,更在于系统工程思维。文章系统阐述了从数据理解、特征工程到模型集成与后处理的全流程,并重点剖析了分层建模、自定义损失函数、时序交叉验证等核心技巧,为参赛者提供了从理论到实战的完整指南。

weixin_29196315的博客 356

设计模式之Bridge——游戏篇(原创)

设计模式之Bridge——游戏篇   今天从电子市场买来两张游戏碟,一张是三国游戏(SanGuoGame),一张是CS游戏(CSGame)。玩过游戏的人可能都知道,游戏对计算机系统(ComputerSystem)是有要求的,可能一个游戏在Windows98系统下能玩,到了Windows2000系统下就不能玩了,因此为了不走冤枉路,先看看游戏要求的计算机系统(ComputerSystem)可是一

lxgljj的专栏 4083

医疗影像处理实战:如何用Slicer和Mimics将.nii.gz文件转为.ply格式(附避坑指南)

本文详细介绍了利用3D Slicer和Materialise Mimics软件,将医学影像中常见的.nii.gz格式文件转换为通用三维网格.ply格式的完整实战流程。文章重点分享了从数据分割、DICOM序列导出到高质量网格生成的核心步骤与关键参数设置,并提供了针对常见问题的避坑指南,旨在帮助医学影像研究者和工程师高效完成从体数据到三维模型的关键转换。

weixin_28304023的博客 103

设计模式18种

一、设计模式之Flyweight——打球篇    周末没事,和朋友约好去体育馆(Gymnasium)打球,这个体育馆(Gymnasium)提供各种球种,因为我们人多,因此选择了羽毛球(badminton),兵乓球(pingpangball)、排球(vollyball)等球种,我们首先要填写选球清单(playBallList),然后去器材部领球。 下面我们看看该如何实现这个过程呢?

yuhan20081021的专栏 940

MSPM0G3507+逐飞库:5分钟搞定KEIL环境配置与LED闪烁(附常见错误解决)

本文详细介绍了如何使用MSPM0G3507微控制器和逐飞库快速配置KEIL开发环境,并实现LED闪烁功能。从芯片支持包安装、逐飞库工程配置到烧录调试,提供了完整的步骤和常见错误解决方案,帮助开发者5分钟内完成环境搭建。

lambda的博客 1195

避坑指南:QCustomPlot鼠标事件冲突解决方案(左键拖动vs右键框选)

本文深入解析QCustomPlot在QT框架下的高级交互实现,重点解决左键拖动与右键框选的冲突问题。通过自定义事件处理和QRubberBand技术,提供了一套完整的无冲突交互方案,帮助开发者优化数据可视化应用的用户体验。

moss5的博客 660

设计模式之bridge(桥)模式

Bridge桥接模式是一种结构型模式,它主要应对的是:由于类型的固有罗辑,使得类型具有两个或两个以上的纬度变化。也就是要求抽象不应依赖于实现细节,实现细节应依赖于抽象。       《设计模式》中说到将抽象部分与实现部分分离,使他们可以独立的变化。       举个例子更清楚些,好像我们平时玩的游戏中有PS版的,但是不是大家都有PS。这时我们等一段时间,一般会出PC版的或其他版本。由于支持

黄刚的专栏 1730

YOLOv11改进有效系列目录 - 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制 - 针对多尺度、小目标、遮挡、恶劣天气等问题

在一些特定情况下,目标检测任务由于多种因素的影响,变得更加复杂和困难。以下是几类常见的困难目标检测场景:1. 小目标检测定义:小目标检测是指当目标在图像中的占比非常小时,模型需要准确识别和定位这些目标。典型场景包括远程监控、卫星图像分析等。挑战1. 低分辨率:由于目标在图像中占据像素较少,细节缺失,特征提取难度增加。2. 特征不足:小目标缺乏明显的形状和纹理特征,容易被复杂背景淹没。3. 检测难度大:由于小目标与背景之间的对比度较低,误检的几率上升。4. 数据不平衡。

qq_64693987的博客 4万+

《设计模式与游戏完美开发》——Bridge

定义: 将抽象与实现分离,使二者可以独立的变化 桥接模式和传统的依赖于接口,不依赖于实现的模式(即通过继承的方式实现功能)有区别。 通过继承的方式实现功能 当俩个类组群自建,关系呈现出交叉组合的情况,采用继承的方式实现就会产生如下的情况,每个实现都需要新派生出一个子类来进行重写实现。 通过桥接的方式实现功能 通过桥接的方式来实现,则是先把俩个组群的顶层抽象出来,然后在顶层包含引...

学无止境 1688

某联达OA任意用户登录漏洞复现

由于`/WebService/Lk6SyncService/DirectToOthers/GetSSOStamp.asm`j接口未作限制,导致可以通过该接口调用`admin`的`cookie`值,通过对`LoginCredence`和`LoginTimestamp`的参数修改,进而实现任意登录进去系统.

千寻的博客 1589

使用 MATLAB/Simulink 搭建一个 无人机群间数据交换与协同控制仿真系统

本文提供了一份详细的Simulink无人机群协同控制仿真教程。主要内容包括:无人机群系统架构设计(去中心化网络、通信分层)、三维运动建模、空-空通信链路实现(距离判断、无线信道)、分布式Consensus控制算法开发,以及性能评估指标设定。教程采用模块化设计思路,通过ModelReference构建多无人机并行模型,并给出了MATLAB函数实现关键算法。最后展示了预期仿真结果(收敛时间<15s、位置偏差<2m)和进阶应用方向(编队飞行、AI协同等),帮助读者掌握群体智能系统的建模与仿真方法。

amy_mhd的博客 155

【转】设计模式之Bridge(桥接)

注释:以下资料都是个人从网上收集起来的,会注明来源地址   如果你想要写一个游戏,并且想让这个游戏同时支持PC和手机,那么怎么样的设计可以避免写两套代码,并且不影响可扩展性呢?说起来还是比较简单的,只要把对平台的依赖部分抽取成抽象的接口(比如说绘图部分),并且针对抽取出来的接口,分别实现PC版和手机版就行了。系统的其他部分只要调用那套抽取出来的接口就可以完成所有的功能。这样来看,系统的其他部...

gdfdfg的专栏 176

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

设计模式之Bridge

Bridge模式定义 :将抽象和行为划分开来,各自独立,但能动态的结合。任何事物对象都有抽象和行为之分,例如人,人是一种抽象,人分男人和女人等;人有行为,行为也有各种具体表现,所以,“人”与“人的行为”两个概念也反映了抽象和行为之分。在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,是一种抽象,一般情况下,行为是包含在一个对象中,但是,

Intraweb的专栏 718

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【设计模式无难事】——Bridge模式

【设计模式无难事】——Bridge模式 一、意图 桥接模式,顾名思义,这里有一个“桥”。。。 为什么需要一个“桥”呢? 我们用它来连接什么呢? 下面先看一个例子 二、例子 需求场景 在游戏中,玩家使用武器砍怪时,战斗的特效的实现 武器:宝剑、铁锤 特效:吸魂、回旋飞 分析&实作 桥接模式实现 1,所有的特效都包括:激活,运用,消失。于是我们定义一个特效接口 Ench

zzy_801011的博客 325

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

设计模式---桥连模式(DesignPattern_Bridge)

DesignPattern_Bridge 摘录自:设计模式与游戏完美开发 十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏...

su9257的博客 130

设计模式(结构型——Bridge模式)

设计模式四、Bridge模式4.1 Bridge模式的概念4.2 Bridge模式的实现 四、Bridge模式 4.1 Bridge模式的概念 使用场景 涉及多个维度上的剧烈变化,将各个维度解耦 例如,游戏中的坦克模型,在型号维度上可以有较大变化,在游戏运行平台上也可以有较大变化,PC端、手机端、TV端等 体现设计模式的原则——合成复用 少用继承,多用组合 若用继承的方式,会将不同维度的变化强烈耦合在一起 4.2 Bridge模式的实现 通过聚合的方式,将多个维度的变化组合在一起 pu

qq_37112587的博客 285

Unity 游戏设计模式 — 桥接模式(Bridge)

中介者模式(Mediator)一、使用中介者模式的原因二、桥接模式的定义三、桥接模式的使用说明四、桥接模式的实现范例五、桥接模式的总结 一、使用中介者模式的原因 比如,在实现较为复杂的角色和装备关系时,将两种角色(ISoldier和IEnemy)和三种武器(WeaponGun、WeaponRifle和WeaponRocket)交叉组合时,会存在以下问题: 每当要新增角色类时,都要在新的子类中重复编写相同的程序代码,比如每种武器都要实现对应角色的Fire。 当新增武器类型时,所有角色子类中的Attack方

qq_40120946的博客 3012

图解设计模式 - Bridge 模式

读书笔记 仅供参考Bridge 模式将类的功能层次结构和类的实现层次结构相连接类的层次结构类的功能层次结构 父类具有基本结构 在子类中增加新的功能 类的实现层次结构 父类通过声明抽象方法来定义接口(API) 子类通过实现具体方法来实现接口(API) UML 和角色Abstraction位于“功能层次结构”顶层,角色保存了 Implementor 的实例RefinedAbstraction继承 Abs

wujunyucg的博客 403

设计模式 Bridge 桥接模式

“ 将抽象部分和实现部分分离,使他们都可以独立的变化。”                                                                                        -《设计模式》GoF个人理解:将一个事务进行多方面的抽象分离,利用组合实现绑定关系。需求:游戏 坦克,多种型号、在不同平台上运行。前提,有不同型号的坦克

LiCeRForDream的专栏 1045

Java设计模式全集-桥接模式(Bridge)

桥接模式(Bridge) 将抽象部分与具体实现分开,通过聚合的方式代替继承,防止因为类不断继承产生类爆炸 比如手机有很多品牌,手机还可以安装游戏,游戏又有不同的开发厂商,将游戏进行抽象,聚合到手机类中,可以通过安装游戏的方法,将不同的游戏对象装入手机对象中,获得不同的对象结果 整体上与抽象工厂非常相似,但侧重点不同,抽象工厂侧重于对于一组产品的集中式扩展,而桥接模式是为了防止类的继承爆炸,是为了...

小萤哥的博客 606

「游戏设计模式」 桥接模式 (Bridge)

桥接模式(Bridge) GoF: 将抽象与实现分离, 使二者可以独立的变化; 误定义 多数人以为这是"只依赖接口而不依赖实现"原则的另一个解释: 定义一个接口类, 然后实现的部分在子类中完成; 要点 将实现"不同功能"交给"不同子类完成" 也就是利用"继承的方式"来完成不同功能的实现 类图 注意 可见, 每增加一个子类就要增加不同功能数的孙类, 扩充不方便; 真的定义 要点 解除"继承实现"的限制; 类图 代码 public abstract class RenderEngine{...} publi

wg_cheeky的博客 223
上一篇: 设计模式之Chain of Responsibility——项目篇
下一篇: 设计模式之Flyweight——打球篇
cyokin
博客等级 码龄24年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值