外观模式
概述
为系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
之前写代码的时候,我总会把U层和外观层写的耦合性很高,这是病得治。将所有需要的方法或属性,组合一起放在Facade层,以备外界调用。如下图所示。
此时,用户不需要了解系统中的方法MethodA,B,C...只需要规定统一一致的Facade类就可以直接调用。掌握了模式的理论知识,接下来就是实践了。
结构
实现
两个子系统的类
<span style="font-family:Microsoft YaHei;font-size:18px;">#region 教师端外观类
public class TeacherFacade
{
//登录
public List<UserEntity > FacadeTeacherLogin(UserEntity User)
{
LoginBLL TeacherLogin=new LoginBLL(); //实例化B层登录业务
List<UserEntity> list = TeacherLogin.InquireUser(User); //调用B层登录方法
return list; //返回登录实体
}
}
#endregion
#region 学生端外观类
public class StudentFacade
{
<span style="white-space:pre"> public List<StudentEntity> FacadeStudentLogin(StudentEntity Student)
{
LoginBLL StudentLogin = new LoginBLL(); //实例化B层登录业务
List<StudentEntity> list = StudentLogin.InquireUser(Student); //调用B层登录方法
return list; //返回登录实体
}</span>
}
#endregion
</span>
外观类
<span style="font-family:Microsoft YaHei;font-size:18px;">public class JFFacade
{
TeacherFacade Teacher; //教师外观类
StudentFacade Student;//学生外观类
public JFFacade()
{
Teacher = new TeacherFacade(); //实例化教师外观类
Student = new StudentFacade();//实例化学生外观类
}
//教师登录外观
public List <UserEntity > TeacherLogin(UserEntity User)
{
List<UserEntity > list=Teacher.FacadeTeacherLogin(User);
return list;
}
}</span>
客户端调用
<span style="font-family:Microsoft YaHei;font-size:18px;">public void TeacherLogin()
{
//判断卡号和密码是否正确
JFFacade LoginFacade = new JFFacade(); //实例化外观类
UserEntity User = new UserEntity(); //实例化User实体类
User.userID = txtUserName.Text.Trim();//把txtUsername 的text属性去掉前后空格赋值
User.password = txtPassword.Text.Trim();
List<UserEntity> list = LoginFacade.FacadeLogin(User); //调用外观教师端登录方法
if (list.Count != null && list.Count > 0) //用户名存在
{
this.Close(); //关闭登录窗体
frmMainTeacher frmMainTeacher = new frmMainTeacher(); //显示教师端主窗体
frmMainTeacher.Show();
//在WorkLog表中添加值班记录
}
else
{
return;
}
<span style="white-space:pre"> </span>}
</span>