【设计模式】轻松了解外观模式

4 篇文章 0 订阅


前言

当我们项目中的代码越来越多时,就会出现一些复杂程度上或是代码逻辑上的问题,这时候就需要用一些固定的解决方案来帮助我们解决问题。这些解决方案不仅可以解决代码框架结构的问题,而且可以很好的降低代码之间的耦合度。这些解决方案就是设计模式。而外观模式就是设计模式中的一种。


一、啥子是外观模式?

为子系统提供一组统一的高层接口,使子系统更加容易使用,这就是外观模式。外观模式可以将代码的复杂性封装起来并对外提供一个访问接口,而不需要关心内部复杂代码的实现和功能。

二、注意看!这有个非外观与外观的对比!

在游戏开发过程中,我们避免不了将游戏常用的功能封装为系统来进行使用,如游戏中都会有音乐,音效,我们就可以封装一个音频管理系统;游戏中还可能会有很多类型的物品,我们就可以封装一个物品管理系统,以此等等。总之,在游戏的制作过程中,我们会封装大量系统。

以下是两种方式的实现。

非外观模式代码

让我们来瞅瞅非外观模式的代码

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 提供的方法)


总结

合理的使用外观模式,可以有效简化我们的代码结构!(本篇文章若有错误,欢迎指正!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值