Facade(外观模式)

一款游戏通常包含了不同的子系统。假如战斗场景运行中,需要多个系统合作完成,简单的实现:将多个子系统的代码放在BattleScene之中。这会造成不好的两点:

  • BattleScene负责战斗场景的的切换及功能执行,不应该负责系统的初始化。
  • 这种设计方式,不容易转接给其他项目使用。


class BattleScene(object):
    def __init__(self):
        self.game_system = None  # 游戏事件系统
        self.camp_system = None  # 兵营系统
        self.level_system = None  # 关卡系统
        self.charater_system = None  # 角色管理系统
        self.action_system = None  # 行动力系统
        self.achievement_system = None  # 成就系统

    def on_init(self):
        self.init_game_sys()

    def init_game_sys(self):
        self.game_system = GameSystem()
        self.camp_system = CampSystem()
        self.level_system = LevelSystem()
        self.charater_system = CharaterSystem()
        self.action_system = ActionSystem()
        self.achievement_system = AchievementSystem()

    def update_game_sys(self):
        self.game_system.update()
        self.camp_system.update()
        self.level_system.update()
        self.charater_system.update()
        self.action_system.update()
        self.achievement_system.update()

如何解决呢?使用外观模式(Facade)来解决,外观模式为子系统定义统一的接口。举个例子:汽车包含非常多的系统:引擎系统、传动系统、车身骨架系统、电装系统。对于驾驶员而言,并不要了解这些系统的如何协调工作,驾驶员只需要通过高级接口(方向盘、踏板、仪表盘)即可操控汽车。因此外观模式的重点在于:隐藏系统间的互动细节,提供简单的接口。下图是外观系统的示意图。
在这里插入图片描述

  • client(客户端、用户)
  • subSystem(子系统)
  • Facade(1、对外的接口,整合子系统的接口和功能 ;2、接受客户端的信息,将信息传给负责的子系统)
    下面是实战框架
from Script.State_Patterns.Application.Scene import Scene

class GameSystemMgr:
    __instance = None

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = super().__new__(cls)

        return cls.__instance

    def __init__(self):
        self._game_system = None  # 游戏事件系统
        self._camp_system = None  # 兵营系统
        self._level_system = None  # 关卡系统
        self._charater_system = None  # 角色管理系统
        self._action_system = None  # 行动力系统
        self._achievement_system = None  # 成就系统
        self.cls

    def on_init(self):
        self.game_system = GameSystem()
        self.camp_system = CampSystem()
        self.level_system = LevelSystem()
        self.charater_system = CharaterSystem()
        self.action_system = ActionSystem()
        self.achievement_system = AchievementSystem()

    def update(self):
        self.game_system.update()
        self.camp_system.update()
        self.level_system.update()
        self.charater_system.update()
        self.action_system.update()
        self.achievement_system.update()

    def release(self):
        self.game_system.release()
        self.camp_system.release()
        self.level_system.release()
        self.charater_system.release()
        self.action_system.release()
        self.achievement_system.release()


class BattleScene(Scene):
    def __init__(self):
        self.game_sys_mgr = GameSystemMgr()

    def scenebegin(self):
        self.game_sys_mgr.on_init()

    def sceneend(self):
        self.game_sys_mgr.release()

    def update(self):
        self.game_sys_mgr.update()

这样,每当游戏多增一个系统的时候,只需要在GameSystemMgr添加即可,并且不需要公布细节。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值