设计模式学习之路(四) ------ 外观模式(Facade)/单例模式(Singleton)

  • 学习网址:https://blog.csdn.net/lovelion/article/details/8258121

外观模式UML类图:            

                                           

外观模式应用实例:

     战斗场景下有各种各样的模块,战斗模块/关卡/角色管理/成就系统等等,因此用一个中介持有这些模块,战斗场景只需要调用

外观类:

using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
//外观模式  后续会补充中介者模式
public class GameFacade
{
    private static GameFacade _instance = new GameFacade(); 


    private bool mIsGameOver = false;


    public static GameFacade Insance { get { return _instance; } }


    public bool isGameOver { get { return mIsGameOver; } }
    
    private GameFacade() { }


    //每个系统都有三个状态函数供外观者调用(Init/Update/Release)
    private ArchievementSystem mArchievementSystem; //成就系统
    private CampSystem mCampSystem;  //兵营系统
    private CharacterSystem mCharacterSystem; //角色系统(战士与敌人)
    private EnergySystem mEnergySystem;  //能力系统
    private GameEventSystem mGameEventSystem; //事件系统
    private StageSystem mStageSystem; //关卡系统


    private CampInfoUI mCampInfoUI;   //点击兵营显示兵营的操作界面(信息/训练/升级等操作)
    private GamePauseUI mGamePauseUI; //游戏暂停界面
    private GameStateInfoUI mGameStateInfoUI;   //游戏状态(战士或者敌人多少个,生命值等等)
    private SoldierInfoUI mSoldierInfoUI;  //点击战士时显示战士当前的信息
    /// <summary>
    /// 游戏初始化
    /// </summary>
    public void Init()
    {
        mArchievementSystem = new ArchievementSystem();
        mCampSystem = new CampSystem();
        mCharacterSystem = new CharacterSystem();
        mEnergySystem = new EnergySystem();
        mGameEventSystem = new GameEventSystem();
        mStageSystem = new StageSystem();


        mCampInfoUI = new CampInfoUI();
        mGamePauseUI = new GamePauseUI();
        mGameStateInfoUI = new GameStateInfoUI();
        mSoldierInfoUI = new SoldierInfoUI();


        mArchievementSystem.Init();
        mCampSystem.Init();
        mCharacterSystem.Init();
        mEnergySystem.Init();
        mGameEventSystem.Init();
        mStageSystem.Init();


        mCampInfoUI.Init();
        mGamePauseUI.Init();
        mGameStateInfoUI.Init();
        mSoldierInfoUI.Init();


        LoadMemento();
    }
    public void Update()
    {
        mArchievementSystem.Update(); 
        mCampSystem.Update(); 
        mCharacterSystem.Update(); 
        mEnergySystem.Update();  
        mGameEventSystem.Update(); 
        mStageSystem.Update(); 


        mCampInfoUI.Update();     
        mGamePauseUI.Update();  
        mGameStateInfoUI.Update();
        mSoldierInfoUI.Update();  
    }
    /// <summary>
    /// 游戏结束,释放
    /// </summary>
    public void Release()
    {
        mArchievementSystem.Release();
        mCampSystem.Release();
        mCharacterSystem.Release();
        mEnergySystem.Release();
        mGameEventSystem.Release();
        mStageSystem.Release();


        mCampInfoUI.Release();
        mGamePauseUI.Release();
        mGameStateInfoUI.Release();
        mSoldierInfoUI.Release();


        CreateMemento();
    }
}

战斗场景类(可以看到,此类非常简洁):

using System;
using System.Collections.Generic;
using System.Text;


public class BattleState:ISceneState
{
    public BattleState(SceneStateController controller):base("03BattleScene",controller)
    {}
    //兵营  关卡 角色管理 行动力 成就系统。。。
    public override void StateStart()
    {
        GameFacade.Insance.Init();
    }
    public override void StateEnd()
    {
        GameFacade.Insance.Release();
    }
    public override void StateUpdate()
    {
        if (GameFacade.Insance.isGameOver)
        {
            mController.SetState(new MainMenuState(mController));
        }

        GameFacade.Insance.Update();
    }
}  

单例模式:  

       学习网址:https://blog.csdn.net/carson_ho/article/details/52223097

缺点:

       不容易扩展(因为无法继承)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值