dongpo

不积跬步,无以至千里;不积小流,无以成江海。

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  0 随笔 :: 3 文章 :: 0 评论 :: 0 Trackbacks

需求:
有一个受保护的文件:
(1)对文件内容进行加密;
(2)任何用户都可以读,但只有管理员用户可以写。

方案1:



FileManager在写文件时,判断要写的文件是否受保护,如果受保护,判断用户是否是管理员。
void
FileManager::Write(File* file, string s)
{
 if (PROTECTEDFILE == file.GetType() &&
  ADMINISTRATOR != userId)
 {
  return;
 }
 file->Write(s);
}

缺点:
FileManager的Write函数,需要根据file的具体类型做区分处理。如果ProtectedFile的权限保护规则有变化,需要修改FileManager。FileManager对于权限保护规则的变化,不符合Open-Close原则。

方案2:



文件权限保护规则,放在ProtectedFileProxy中,且它实现了File接口,这样FileManager就可以把ProtectedFileProxy当作普通文件处理。

void
ProtectedFileProxy::Write(string s)
{
 if (ADMINISTRATOR == userId)
 {
  m_pProtectedFile->Write(s);
 }
}

void
FileManager::Write(File* file, string s)
{
 file->Write(s);
}

总结:
1.作用:为其它对象提供一种代理以控制对这个对象的访问。
2.效果:Proxy模式在访问对象时引入了一定程度的间接性,这个间接性对用户是透明的,即用户不依赖于这种间接性的变化。附加的间接性有多种用途:
(1)Remote Proxy,访问远程对象,就跟访问本地对象一样。如RMI。
(2)Virtual Proxy,可以智能的决定创建对象的时机。
(3)Protection Proxy,允许在访问一个对象时有一些附加地内务处理(如权限检查)。

posted on 2010-03-15 21:15 学不可以已 阅读(88) 评论(0)  编辑 收藏 引用 所属分类: 设计模式

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理