unity外观模式

外观模式

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用

优缺点

优点:
1)外观模式对客户端屏蔽了子系统组件,从而简化了接口,减少了客户端处理的对象数目并使子系统的使用更加简单。

2)外观模式实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件是紧耦合的。松耦合使得子系统的组件变化不会影响到它的客户端。

缺点:

增加新的子系统可能需要修改外观类或客户端,违背了“开闭原则”。

然后给大家看下简单的外观模式的代码

public class TestReflect : MonoBehaviour
{
    private void Start()
    {
        //外观模式控制怪物的行为
        Facade facade = new Facade();
        facade.AllRun();
        facade.AllAttack();
        facade.AllDie();

        //非外观模式控制怪物行为
        Monster1 mon1 = new Monster1();

        mon1.Run();
        mon1.Attack();
        mon1.Die();
    }
    class Monster1
    {
        public void Attack()
        {
            Debug.Log("怪物1攻击");
        }
        public void Die()
        {
            Debug.Log("怪物1死亡");
        }
        public void Run()
        {
            Debug.Log("怪物1奔跑");
        }
    }
    class Monster2
    {
        public void Attack()
        {
            Debug.Log("怪物2攻击");
        }
        public void Die()
        {
            Debug.Log("怪物2死亡");
        }
        public void Run()
        {
            Debug.Log("怪物2奔跑");
        }
    }
    class Monster3
    {
        public void Attack()
        {
            Debug.Log("怪物3攻击");
        }
        public void Die()
        {
            Debug.Log("怪物3死亡");
        }
        public void Run()
        {
            Debug.Log("怪物3奔跑");
        }
    }
    /// <summary>
    /// 外观类
    /// </summary>
    class Facade
    {
        Monster1 monster1;
        Monster2 monster2;
        Monster3 monster3;
        /// <summary>
        /// 构造方法
        /// </summary>
        public Facade()
        {
            monster1 = new Monster1();
            monster2 = new Monster2();
            monster3 = new Monster3();
        }
        public void AllDie()//集体死亡
        {
            monster1.Die();
            monster2.Die();
            monster3.Die();
        }
        public void AllAttack()//集体攻击
        {
            monster1.Attack ();
            monster2.Attack();
            monster3.Attack();
        }
        public void AllRun()//集体奔跑
        {
            monster1.Run ();
            monster2.Run();
            monster3.Run();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44302602/article/details/108384877
今日推荐