让ATM告诉你什么是封装——读《你必须知道的.net》

例如每当发工资的日子小王都来到 ATM机前,用工资卡取走一笔钱为女朋友买礼物,从这个很帅的动作,可以得出以下的结论:

— 小王和ATM机之间,以银行卡进行交互。要取钱,请交卡。

— 小王并不知道ATM机将钱放在什么地方,取款机如何计算钱款,又如何通过银行卡返回小王所要数目的钱。对小王来说,ATM就是一个黑匣子,只能等着取钱;而对银行来说,ATM机就像银行自己的一份子,是安全、可靠、健壮的员工。

— 小王要想取到自己的钱,必须遵守 ATM机的对外约定。他的任何违反约定的行为都被视为不轨,例如欲以砖头砸开取钱,用公交卡冒名取钱,盗卡取钱都将面临法律风险,所以小王只能安分守己地过着月光族的日子。

 

 

那么小王和 ATM 机的故事,能给我们什么样的启示?对应上面的 3 条结论,我们的分析如下

— 小王以工资卡和ATM机交互信息,ATM机的入卡口就是 ATM机提供的对外接口,砖头是塞不
进去的,公交卡放进去也没有用。

—  ATM机在内部完成身份验证、余额查询、计算取款等各项服务,具体的操作对用户小王是不可见的,对银行来说这种封闭的操作带来了安全性和可靠性保障。

— 小王和ATM机之间遵守了银行规定、国家法律这样的协约。这些协约和法律,就挂在 ATM机旁边的墙上。

 

 

结合前面的示例,再来分析封装吧。具体来说,封装隐藏了类内部的具体实现细节,对外则提供统一访问接口,来操作内部数据成员。这样实现的好处是实现了 UI分离,程序员不需要知道类内部的具体实现,只需按照接口协议进行控制即可。同时对类内部来说,封装保证了类内部成员的安全性和可靠性。

 

在上例中,ATM 机可以看做封装了各种取款操作的类,取款、验证的操作对类ATM 来说,都在内部完成。而 ATM 类还提供了与小王交互的统一接口,并以文档形式——法律法规,规定了接口的规范与协定来保证服务的正常运行。以面向对象的语言来表达,类似于下面的样子

 

 

    public class ATM
    {
        #region 定义私有方法,隐藏具体实现
        
        private Client GetUser(string  userID) {}
        private bool IsValidUser(Client user) {}
        private int GetCash(int money) {}
        #endregion 


        #region 定义公有方法,提供对外接口
        public void CashProcess(string userID, int money)
        {
            Client tmpUser = GetUser(userID);
            if (IsValidUser(tmpUser))
            {
                GetCash(money);
            }
            else
            {
                Console.Write("你不是合法用户,是不是想被发配南极?");
            }
        }
        #endregion
    }
    /// <summary>
    /// 用户类
    /// </summary>

    public class Client
    {
    }
}

 

转载于:https://www.cnblogs.com/abenmao/archive/2012/06/19/2555461.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值