保护代理程序的日常应用
时间:2012-6-14
每个对于这个账户的操作都是被一个叫做check_access方法的调用保护着.这个check_access方法正好它的名字所提示的那个,它确保当前的用户是被允许个账户的用户.这个check_access的示例版本使用Etc模组来获得当前用户的名字,然后将当前用户名和类的构造器中传入的账户所有者的名字进行对比.
显然,我们可以将这段检测代码放进BankAccount对象本身,而使用一个代理来做保护的好处是,可以使我们将非核心功能独立出来,这个代理关心谁是谁或者当前用户是否能这样做,而一个真正的银行账号对象所要唯一关心的就是银行账号,通过在一个代理中实现安全控制,我们就可以很容易地切换不同的安全模式(只需要将主题换入不同的代理中)或者取消安全限制,不仅如此,我们还可以修改BandAccount对象的实现,而不需要担心是否会打乱他们的安全计划.
保护代理相对于"将所有安全和功能实现在一个类中"的方法还有一个优势,通过将保护层清楚从真实的工作中分享出来,我们就可以将重要信息被不经意地泄露出去的可能性减少到最小.