当前位置:  技术问答>linux和unix

一个简单的问题:什么是“prototype”模式?

    来源: 互联网  发布时间:2015-09-18

    本文导语:  学习Unix时看到如下一段话: 在给新用户设置磁盘配额时常是在“prototype”模式下,以其他用户的配额设置作模板给新用户设置配额。如“edquota -p proto-user new-user”设置了new-user的配额和proto-user的配额相同。 什么是...

学习Unix时看到如下一段话:
在给新用户设置磁盘配额时常是在“prototype”模式下,以其他用户的配额设置作模板给新用户设置配额。如“edquota -p proto-user new-user”设置了new-user的配额和proto-user的配额相同。
什么是“prototype”模式?

|
设计模式里有原型模式的概念。

比如说,你在用C++开发东东,现在你实现一个函数,传入一个参数-类名,函数返回一个新生成的该类的对像,你想怎么做呢?
传统的作法是
Filter * make_filter_object(const string& name)
{
  if (name == "AddFilter) return new AddFilter;
  else if (name == "OrFilter) return new OrFilter;
  ......
}
这样的程序很不好看,但是C++又没有那种创建类对像的机制,那怎么办呢?
Filter是虚基类,给它加一个虚方法Clone,对,克隆。每个子类都重写这个方法以克隆出自己类的对像。再加一个虚方法GetName,取得自己类的名字。
比如Filter * OrFilter::Clone()
{
  return new OrFilter(this);
}
string OrFilter::GetName(){return "OrFilter";}
在程序初始化时,把每个类实例化出来一个“原型”,用于创建自己类的对像(通过Clone),因为这些原型的基类型相同所以它们的指针可以存在一个数组里,数组的元素类型为filter。
这样,上面那个创建对像的函数就可以写成:
Filter * make_filter_object(const string& name)
{
  for each object "O" in object array
  {
    if (O->GetName() == name) return O->Clone();
  }
}

结合理解一下吧。个人认为原型的精髓就是预先生成特定的对像,用于创建(克隆)同类的对像。

|
体会设计模式要慢慢来

    
 
 

您可能感兴趣的文章:

  • 关于gcc -fno-strict-prototype 参数的问题
  • 菜鸟 问 个问题 请问怎么 在 文字模式下 进入 GNOME ,从GNOME 又怎么退回到文字模式?
  • 有关Red hat linux9.0从图形模式转换成文字模式的小问题~~~(新手)
  • rh8.0的安装问题(正常模式和VMWARE下的问题)
  • intel386中不同模式切换的问题
  • AT&T汇编 Linux保护模式编程问题
  • [RedHat9]RedHat9无法进入图形模式,疑是声卡问题,请教如何解决?
  • gtk 窗口模式 怪问题(100分)
  • 请教FreeBSD下的Vi在命令模式下的编辑问题
  • jquery选择checked在ie8普通模式下的问题
  • 请教gcc编程 问题 关于调用中断 实现 图形模式
  • 关于epoll ET模式read的一些问题
  • 小问题,如何启动时装入XMS内存模式?游戏仙剑续集需要的。
  • 在命令行模式下,能浏览http吗等低级问题
  • 一个关于命令行模式下的问题
  • 显示器保护模式问题!!!!!!!!!
  • unix/linux知识 iis7站长之家
  • linux文本模式的分辨率问题
  • 在线求助:关于纯文本模式下有乱码的问题。
  • 请问关于保护模式下逻辑地址的一个问题
  • ▄︻┻┳═一 500高分求解非常非常重要的问题:关于在640*480显示模式下,中文字体(黑体)会出现少笔画的问题 ▄︻┻┳═一
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 简单问题简单问题简单问题简单问题
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • 小问题,急问题,重大问题!!!
  • sharepoint 2010中item.Update()和item.SystemUpdate 修改数据版本问题解决
  • 弱弱的一问,linux下的中文问题及网络问题,分不是问题
  • 八个问题帮你快速了解Docker
  • 请教两个小问题:一个cgywin下使用vi的问题,另一个socket的问题
  • 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决
  • 网页的编码问题!或者java的编码问题,由此引出一条解决中文问题的思路
  • nginx Windows版相关问题及使用说明
  • 死锁的问题 多级锁定问题 循环锁定问题
  • vs2010下禁用vmware的方法以及解决vmware插件导致vs2010变慢的问题
  • [问题]双系统出现的问题!求问题的原因和解决办法!
  • Linux下时钟同步问题:Clock skew detected原因分析及解决方法
  • 初学者问题。一个是编译hello world的问题,一个是配置ssh的问题
  • c/c++服务器程序内存泄露问题分析及解决
  • C程序问题:哪个高手帮我解释下下面的问题,主要是a[0]和&[0] 的区别 和编译器的问题??
  • ​部署 Docker 前必须问自己的四个问题
  • swing的问题还是jbuiler的问题??
  • spring的事务类型及spring和hibernate可能导致的问题分析
  • 菜鸟第一次安装红帽子7.2的一箩筐问题。每个问题会开个帖子,各放100分!请有安装经验的老鸟们帮忙解决。第二个问题:什么是LILO?怎么样


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3