栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

设计模式-(外观模式)

Java 更新时间:发布时间: 百科书网 趣学号
定义

外观模式:为子系统定义一组统一的接口,这个高级的接口会让子系统更容易被使用。简单就是让客户端使用简单的界面来操控一个复杂的系统,减少客户端的要与之交互的系统数量,让客户端能够专心处理与本身有关的事情。

组成部分

1.client(客户端,用户)从原本需要操控多个子系统改为面对一个整合后的界面。
2.subSystem(子系统)原本由不同的客户端即非同一个系统相关来操作,改为只会内部系统之间交互使用。
3.Facade(统一对外的界面)整合所有子系统的接口和功能,并提供接口供客户端使用。接受客户端的信息,将信息送给负责的子系统。

游戏应用

以植物大战僵尸为例,在战斗场景中,这个流程需要植物系统,僵尸系统,太阳系统等等,对于整个战斗系统而言,并不需要知道这些系统是如何交互,只需要调用接口就可以实现效果。
设计的脚本:
1.BaseDefenseGame 战斗统一对外的界面,包含与游戏相关的子系统,并提供接口让客户端使用
2.DefenseSystem,EnemySystem,SunSystem,MoneySystem 作为子系统管理各个功能模块。
3.BattleState 战斗状态类,是与BaseDefenseGame 互动的客户端之一。

在这里子系统就不一一展示,因为并不是文章的核心。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BaseDefenseGame 
{
    private DefenseSystem defenseSystem = null;  //植物系统
    private EnemySystem enemySystem = null;      //僵尸系统
    private SunSystem sunSystem = null;          //太阳系统
    private MoneySystem moneySystem = null;      //金币系统

    public void Init()
    {
        defenseSystem = new DefenseSystem();
        enemySystem = new EnemySystem();
        sunSystem = new SunSystem();
        moneySystem = new MoneySystem();
    }

    public void Update()
    {
        defenseSystem.Update();
        enemySystem.Update();
        sunSystem.Update();
        moneySystem.Update();
    }

    public void Release()
    {
        efenseSystem.Release();
        enemySystem.Release();
        sunSystem.Release();
        moneySystem.Release();
    }

    //获取太阳的数量
    public int GetSunNum()
    {
        if (sunSystem != null)
        {
            return sunSystem.GetSunNumber();
        }
        return 0;
    }

}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BattleState : ISceneState
{
    private SceneContext sceneContext;
    public BattleState(SceneContext sceneContext):base(sceneContext)
    {
        this.sceneContext = sceneContext;
    }

    public override void SceneBegin()
    {
        BaseDefenseGame.Instance.Init();
    }

    public override void SceneEnd()
    {
        BaseDefenseGame.Instance.Release();
    }


    public override void SceneUpdate()
    {
        BaseDefenseGame.Instance.Update();
    }
}

优缺点

在该设计中,使用外观模式让战斗状态类BattleState单一化,让该类只负责游戏在战斗状态下的功能执行和状态切换,不负责各个游戏系统的初始化和功能调用。具体优点:1.减少了不必要的类引用和功能整合,增加了BattleState类被重复使用的机会。同时减少系统之间的耦合度,有助于减少系统构建时间,以c/c++为例,当接口中的方法修改了,任何引用到该头文件.h的单元都必须重新编译。2.易于分工,对于一个庞大的系统,使用外观模式,对于其他人只需要了解对方提供系统的Facade接口类就行,不需要深入了解其中的运行结构。

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/956893.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号