看过《设计模式》的朋友帮我一下!

lonelybug 2003-07-10 12:32:43
我看二章的时候,他在一个对不同操作系统来实现窗口的问题上用到了abstract factory和bridge(后来提及的)模式!

有一点不明白,在p37 2.6.3(window和windowimp)的设计的时候,虽然可以做到在window的子类里面实现对特定窗口(dialog application等)的代码中调用windowimp(这里面是window的一个成员变量名字_imp)中的相应操作系统的具体实现的方法,但是我不知道通过这个模式如何让程序在运行的时候可以判断应该调用那个具体操作系统的实现子类呢!?我记得前面的“支持多种视感标准”中用到过可以判断一些特定的字符串这类的方法来判断具体应该调用那个操作系统的子类,可是在这里面去没有给出,而且后面好像也没有说!

那位大虾可以帮忙解释一下如何实现判断调用windowimp中的那个子类呢!?谢了!
...全文
33 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lonelybug 2003-07-11
  • 打赏
  • 举报
回复
也就是说在定义_imp这个变量的时候就要定下来用那个windowimp的子类来实现了!对吧!各位!?
lonelybug 2003-07-11
  • 打赏
  • 举报
回复
原来如此!谢谢了!哈哈!给分给分了!
tangmasi 2003-07-11
  • 打赏
  • 举报
回复
当然这个时候你的程序可以通过某种办法(包括由用户选择)来确定该用哪个子类来创建_imp对象啦!:)
LaoLi_SC_008 2003-07-11
  • 打赏
  • 举报
回复
正是这样,你是不可能为一个虚拟类创建对象的。
zl_jingmao 2003-07-10
  • 打赏
  • 举报
回复
紧接着的"用Wi n d o w I m p来配置Wi n d o w s"不是描述得很清楚马?
LaoLi_SC_008 2003-07-10
  • 打赏
  • 举报
回复
这就是类的多态性了,变量imp在创建的时候就需要指定其实现类(MacWindowImp、PMWindowImp或XWindowImp),而不能直接为虚拟父类WindowImp创建对象。然后再用WindowImp类型的指针指向该对象,这样你用哪个实现类创建的对象,就会调用哪个类的方法(WindowImp所定义的方法只是一个虚的接口而已)
tangmasi 2003-07-10
  • 打赏
  • 举报
回复
简单!不用判断啊!他不是聚合了一个抽象类实例变量_imp吗?这个_imp是由window类来赋值的。就是说由window类或其子类来选择具体的系统。然后通过虚函数的形式自然可经由
_imp->VirtualFunc();形式调用到正确的WindowImp子类函数了。
lonelybug 2003-07-10
  • 打赏
  • 举报
回复
没有!我看了!他并没有说明如何来实现判断操作系统的实现!

1,265

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧