游戏设计模式:桥接模式

桥接模式

何为桥接模式,桥接模式是GOF的23种设计模式中,最常应用的但也是最难理解的。该设计模式的关键思想是“抽象与实现分离”,使二者可以独立的变化。很多人最浅的理解是,这是只依赖了接口而不依赖实现,也就是定义了一个接口类,然后将实现的部分全部在子类去重写,下面让我们看看这样写会有什么问题。
假设现在有一个需求:我们要实现一个3D绘图工具,并且要支持Opengl和DirectX。首先,定义球体这个类和两个绘图引擎。代码如下

class ISphere(object):

    def draw(self):
        pass
    
    
class DirectX(object):
    
    def DX_draw(self):
        pass
    

class Opengl(object):
    
    def GL_draw(self):
        pass

球类是一个抽象类,公开了draw函数。因为要支持两种3d绘图API,所以要再定义继承Ishaper的两个子类,由这两个子类分别实现,以支持不同的3D绘图API,结构图如下图所示:
在这里插入图片描述

# 球体使用Direct绘出
class SphereDX(ISphere):
    def __init__(self):
        self.m_directx = None

    def draw(self):
        self.m_directx.DXRender('Sphere')


# 球体使用Direct绘出
class SphereGL(ISphere):
    def __init__(self):
        self.m_opengl = None

    def draw(self):
        self.m_opengl.GLRender('Sphere')

这样似乎是解决了系统判定的使用,如果是Windows下的系统则使用DirectX绘制,如果是MAC系统则使用Opengl绘制。那么问题来了,如果我这个时候,需求增加绘制立方体、球体、圆柱体,则设计结构会变成如下图:
在这里插入图片描述
除了要考虑Windows系统、Mac系统,假如这个绘图工具想要在移动设备下运行,就必须支持Opengl ES,那这意味着必须增加第三个绘图引擎作为实现的方法,因此设计变成了这般:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值