码迷,mamicode.com
首页 > 其他好文 > 详细

简单的外观模式

时间:2014-08-22 16:28:29      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:设计模式

最近机房收费系统的重构完成了,尽管就用了两个设计模式,但是却还是感觉怪怪的,总感觉外观有问题,知道昨天实验了一个晚上,才发现自己是哪里错了,现在就把我认为正确的外观介绍给大家。

什么是外观。

简单的说就是一组借口,用来连接客户端与复杂功能实现的一组借口,防止客户端与子系统内部产生耦合,从而导致客户程序随着子系统的变化也要发生变化,我们就用了一个外观模式这个借口来实现他。

bubuko.com,布布扣

为什么要用呢?

大家在编程的时候有时候会遇到这么一个问题,比如最简单的登陆来说吧,我们会先进行卡号的查询,如果卡号通过了,在进行密码的查询,两项都通过了,才能进入权限,所以我们在客户端的代码中就会调用两个方法,然后再注册的时候,我们同样需要判断这两项是否存在,这个方法又需要调用两遍,2遍看上去不是很多,那如果三个方法呢,四个方法的组合呢,所以我们就会想到把这几个方法封装成一个方法,所以外观模式就应运而生了。

下面我们来看一看如果不用外观是什么样子的。例如一个登陆的Demo,我们需要两个方法,判断用户名和用户密码。

bubuko.com,布布扣

那么再看看用了外观是什么样子的。

bubuko.com,布布扣

代码如下

方法

 '验证用户是否存在
    Public Function IsExist(ByVal user As Entity.Userinfo) As Boolean
        Dim iuser As IDAL.IUser
        Dim factory As New Factory.DataAccess
        Dim mylist As New List(Of Entity.Userinfo)
        '调用工厂的方法创建出一个接口
        iuser = factory.CreateUser()
        '调用借口的方法,返回值给List这个泛型集合
        mylist = iuser.QueryUserinfo(user)
        If mylist.Count = 0 Then

            MsgBox("用户名输入错误")
            Return False
        Else
            Return True
        End If

    End Function

    '验证密码是否正确
    Public Function ConfirmPwd(ByVal user As Entity.Userinfo) As Boolean
        Dim Iuser As IDAL.IUser
        Dim factory As New Factory.DataAccess
        '利用抽象工厂+反射调用一个接口方法
        Iuser = factory.CreateUser()
        Dim mylist As New List(Of Entity.Userinfo)
        '根据登陆的用户名来查询密码,返回给List
        mylist = Iuser.QueryUserinfo(user)
        '如果用户名正确
        If mylist.Count = 1 Then
            '如果密码正确
            If mylist.First.PWD = user.PWD Then
                Return True
                ' 错误的话
            Else
                MsgBox("密码错误")

            End If
        End If
    End Function
外观层

    ''' <summary>
    ''' 登陆的外观
    ''' </summary>
    ''' <param name="user">传入的用户名和密码</param>
    ''' <returns>Boolean</returns>
    ''' <remarks></remarks>
    Public Function login(ByVal user As Entity.Userinfo) As Boolean
        Dim confirmBLL As New BLL.LoginBLL
        Dim flag As Boolean
        ' 查询用户名方法
        flag = confirmBLL.IsExist(user)
        '查询密码方法
        flag = confirmBLL.ConfirmPwd(user)

        Return flag
    End Function
客户端

     Dim euser As New Entity.Userinfo                                '实例化新的UserInfo,用来传递B层的实体
            '传入参数
            euser.UserName = txtUserName.Text.Trim                          '将用户名传递给实体层的UserName
            euser.PWD = txtPwd.Text.Trim                               '将密码传递给实体层的PWD

            '调用外观层,判断登陆
            Dim LoginUI As New Facade.UserFac
 
            If LoginUI.login(euser) = True Then

                MsgBox("登陆成功")
            Else
                Exit Sub

            End If
说到底,外观在我看来就是一个借口,为了复用,为了让我们客户端的维护更容易的接口,也许他让业务逻辑更复杂一些,程序的执行稍慢一点,却完全不能掩饰他为我们带来的好处,那就是代码的简洁。

简单的外观模式

标签:设计模式

原文地址:http://blog.csdn.net/lovemenghaibin/article/details/38754353

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!