前言
当我们项目中的代码越来越多时,就会出现一些复杂程度上或是代码逻辑上的问题,这时候就需要用一些固定的解决方案来帮助我们解决问题。这些解决方案不仅可以解决代码框架结构的问题,而且可以很好的降低代码之间的耦合度。这些解决方案就是设计模式。而外观模式就是设计模式中的一种。
一、啥子是外观模式?
为子系统提供一组统一的高层接口,使子系统更加容易使用,这就是外观模式。外观模式可以将代码的复杂性封装起来并对外提供一个访问接口,而不需要关心内部复杂代码的实现和功能。
二、注意看!这有个非外观与外观的对比!
在游戏开发过程中,我们避免不了将游戏常用的功能封装为系统来进行使用,如游戏中都会有音乐,音效,我们就可以封装一个音频管理系统;游戏中还可能会有很多类型的物品,我们就可以封装一个物品管理系统,以此等等。总之,在游戏的制作过程中,我们会封装大量系统。
以下是两种方式的实现。
非外观模式代码
让我们来瞅瞅非外观模式的代码
using UnityEngine;
//定义一个 Player 类作为玩家系统
public class Player
{
public void Do()
{
Debug.Log("这里是 Player 系统!");
}
}
//定义一个 NPC 类作为NPC系统
public class NPC
{
public void Do()
{
Debug.Log("这里是 NPC 系统");
}
}
// 定义一个 Enemy 类作为敌人系统
public class Enemy
{
public void Do()
{
Debug.Log("这里是 Enemy 系统");
}
}
public class Facade : MonoBehaviour
{
//调用每个类(系统)中的方法
void Start()
{
Player player = new Player();
player.Do();
NPC npc = new NPC();
npc.Do();
Enemy enemy = new Enemy();
enemy.Do();
}
}
在上段代码中,当我们希望使用某一个类(系统)时,都回去单独实例化该类(系统),然后再使用其中的方法。但是,如果我们所需要的类(系统)过多时,我们就会看到项目中随时都在调用各个类(系统),这不止会让代码看上去十分杂乱,还很难对代码进行修改。
外观模式代码
为了避免上述情况, 我们的外观模式就来了!
using UnityEngine;
public class Player
{
public void Do()
{
Debug.Log("这里是 Player 系统!");
}
}
public class NPC
{
public void Do()
{
Debug.Log("这里是 NPC 系统");
}
}
public class Enemy
{
public void Do()
{
Debug.Log("这里是 Enemy 系统");
}
}
//创建一个外观类
public class TheFacade
{
Player player;
NPC npc;
Enemy enemy;
//初始化我们所需要用的类(系统)
public TheFacade()
{
player = new Player();
npc = new NPC();
enemy = new Enemy();
}
//将所包含系统的方法进行封装
public void PlayerDo()
{
player.Do();
}
public void NpcDo()
{
npc.Do();
}
public void EnemyDo()
{
enemy.Do();
}
}
public class Facade : MonoBehaviour
{
void Start()
{
//调用时,从外观类进行调用
TheFacade theFacade = new TheFacade();
theFacade.EnemyDo();
theFacade.PlayerDo();
theFacade.NpcDo();
}
}
对比两种方式,我们会发现虽然外观模式多添加了一个类,但是可以将子系统全部封装起来,所以在使用的时候我们不知道有几个子系统或子系统都有什么接口,直接调用外观类提供的接口就行,使用起来十分方便。
三、如何使用外观模式
使用外观模式的大概思路为下:
1:创建所需要的系统类 (上文中的 Player, NPC, Enemy 三个类)
2:创建一个外观类,并对所需要使用的系统类的方法进行封装(上文中外观类为 TheFacade 对三个系统类的 Do 方法进行了封装)
3:在主程序中直接使用外观类提供的接口调用方法(上文中在 Facade 类中使用 TheFacade 提供的方法)
总结
合理的使用外观模式,可以有效简化我们的代码结构!(本篇文章若有错误,欢迎指正!)