菜鸟也疯狂之外观模式
在笔者看来,外观模式名字取起的和它本身的作用毫不搭配,对它的应用也特别简单,简单到我都不想称之为设计,从这点可以反映出设计模式实际上就是编程的人为了方便而设计的逻辑而已,只要你能想得到某种代码组织结构并且能为你解决实际项目中的问题,你的代码就是设计模式,所以,初学的朋友不要觉得很难。
好了,我们入正题,想必很多小伙伴编程时常常会在A类当中引用了一个或者多个其他类,然后在客户端通过调用A类对象中的方法来执行其他类中的方法。这么做为的是什么,无法就是为了方便的管理,看上去也清晰,各司其职,很容易就能联想到的一些设计,而这样的设计就已经靠近外观模式了,注意,是靠近哦,为什么这么说,我们先走代码,结尾再给出理由。
public class WaiG : MonoBehaviour
{
// Use this for initialization
void Start ()
{
RegistrationFacade rf = new RegistrationFacade();
rf.Bonuses();
}
}
/// <summary>
/// 外观类
/// 客户端调用这个角色的方法。
/// 该角色知道相关的一个或多个子系统的功能和责任,
/// 该角色会将从客户端发来的请求委派带相应的子系统中去。
/// </summary>
public class RegistrationFacade
{
private TechnicalDepartment technical;
private FinancialDepartment financial;
public RegistrationFacade()
{
technical = new TechnicalDepartment();
financial = new FinancialDepartment();
}
public void Bonuses()
{
technical.TakeMoney( financial.GetMoney() );
}
}
// 技术部门
public class TechnicalDepartment
{
public void TakeMoney(float money)
{
Debug.Log("拿到的奖金为:" + money);
}
}
// 财务部门
public class FinancialDepartment
{
public float GetMoney()
{
return 10000000f;
}
}
我相信上边的代码结构很多人使用过,也相信既使用上述代码结构的同时又在客户端调用技术部门或财务部门类中的公有方法,犹如我开头所讲,如果不知道其背后的含义,这样的结构只能算是靠近外观模式,一旦客户端调用了子系统(技术部门类和财务部门类)中的方法,那这样的结构就不叫做外观模式了。
外观模式提供了一个统一的接口,为了让外部减少与子系统内多个模块的交互,使用了外观模式之后,客户端只依赖与外观类,从而将客户端与子系统的依赖解耦了,这也就是笔者为什么说若客户端直接调用子系统就不能称之为外观模式了,既然是子系统就一定是在某个大系统内部使用的系统,不能外用,否则结构就好比邋遢人的房间凌乱不堪。