设计模式之外观模式

Facase(外观模式)

在Gof解释:为子系统定义统一接口,这个高级的接口会让子系统更容易被调用。
以驾驶汽车为例,当驾驶者开一辆汽车在路边行驶时,汽车内部右许多的系统一起配合才能完成汽车的行走功能,这些系统可能包含:引擎系统,传动系统,电装系统…,但是,对于驾驶员来说,并不需要了解这些系统时如何协调工作的,他只需要通过高级接口(方向盘,踏板,仪表器)就可以让汽车跑起来。所以,外观模式的重点就是将系统内部的互动细节隐藏起来,并提供一个简单的接口,之后客户端通过这个接口,就可以操作复杂的系统并让它们顺利的运行。

Facase(外观模式)的说明

在这里插入图片描述

  1. Client (客户端,用户)从原本需要操作多个子系统的情况,改为只需要操作一个整合后的界面。
  2. SubSystem (子系统)原本由不同的客户端来操作,改为只会由内部系统之间交互使用。
  3. Facase(外观模式 统一对外的界面),整合所有子系统的接口及功能,并提供高级界面或者接口供用户使用。接收客户端的信息后,将信息传递给负责的子系统。
Facase(外观模式)框架设置

在这里插入图片描述

  1. 个子系统实现自己功能并提供接口
  2. PBaseDefenseGame: 包含了和系统相关的子系统对象,并提供了界面让客户端使用。
  3. BattleState: 客户端
实现说明

在PBaseDefenseGame类中,将所有的子系统定义为类的成员。

   public class PBaseDefenseGame
    {
        ...
        //游戏系统
        private GameEeventSysem m_GameEeventSysem = null;           //游戏事件系统
        private GameSystem m_GameSystem = null;                     //兵营
        private StageSystem m_StageSystem = null;                   //关卡系统
        private CharacterSystem m_CharacterSystem = null;           //角色管理系统
        ...
    }

提供初始化方法,供游戏开始调用,初始化方法被调用时,各个子系统的对象才会被生产出来。

 public void Initinal()
    {
        //游戏系统
        m_GameEeventSysemv = new GameEeventSysem(this);
        m_GameSystem = new GameSystem(this);
        m_StageSystem = new StageSystem(this);
        m_CharacterSystem = new CharacterSystem(this);
        ...
    }

在定义出相关的高级界面供客户端使用,而这些方法,多数会把收到的信息或者请求转发给相应的子系统负责。

  public void Update()
    {
        m_GameEeventSysemv.Updata();
        m_GameSystem.Updata();
        m_StageSystem.Updata();
        m_CharacterSystem.Updata();
        ...
    }

    public bool ThisGameIsOver()
    {
        return m_bGameOver;
    }

    public int GetEnemyCount()
    {
        ...
    }

在客户端中(BattelState)中,通过PBaseDefenseGame类提供的接口来操作系统的运行,

public class BattleState : IScenState
    {
        ....
        publie override void StateBeging()
        {
            ...
            PBaseDefenseGame.Instance,Initnal();
        }

        publie override void StateEnd()
        {
            ...
            PBaseDefenseGame.Instance,Release();
        }

        publie override void StateUpdate()
        {
            ...
            PBaseDefenseGame.Instance,Updata();
        }
    }
外观模式缺点

由于将所有的子系统集中在Facade接口中,最终会导致Facade接口类过于庞大且难以维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值