外观模式
外观模式(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();
}
}
}