外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通过外观类来调用内部子系统中方法,从而外观模式让客户和子系统之间避免了紧耦合。
下面是代码:
/// 以学生选课系统为例子演示外观模式的使用
/// 学生选课模块包括功能有:
/// 验证选课的人数是否已满
/// 通知用户课程选择成功与否
/// 客户端代码
/// </summary>
private static RegistrationFacade facade = new RegistrationFacade();
private void button1_Click(object sender, EventArgs e)
{
if (facade.RegisterCourse("设计模式", "Learning-Hard"))
{
MessageBox.Show("选课成功");
}
else
{
MessageBox.Show("选课失败");
}
}
}
//外观类
public class RegistrationFacade
{
private RegisterCouser registerCourse;
private NotifyStudent notifyStu;
public RegistrationFacade()
{
registerCourse = new RegisterCouser();
notifyStu = new NotifyStudent();
}
public bool RegisterCourse(string courseName,string studentName)
{
if (!registerCourse.CheckAvailable(studentName))
{
return false;
}
return notifyStu.Notify(studentName);
}
}
#region
//相当于子系统A
public class RegisterCouser
{
public bool CheckAvailable(string courseName)
{
MessageBox.Show(string.Format("正在验证课程 {0}是否人数已满", courseName));
return true;
}
}
//相当于子系统B
public class NotifyStudent
{
public bool Notify(string studentName)
{
MessageBox.Show(string.Format("正在向{0}发生通知", studentName));
return true;
}
}
#endregion
执行结果: