免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1509 | 回复: 4
打印 上一主题 下一主题

[C++] 这种情况下如何使用"adapter模式"? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-22 11:47 |只看该作者 |倒序浏览
10可用积分
我有一个这样的类:
class A
{
public:
   A();
   ~A();

//在A的实现部分中,GetStr仅是用来返回val

   CString *GetStr();

private:
   CString *val;
}



这个类放在一个DLL中,导出了。

因为使用了MFC的CString
我要在一个SDK程序里面使用。 所以,没办法使用这个CString,只要引入这个头文件,就会导致CString未声明的错误。

所以我就要用个中间接口来做,自己定义一个B类
然后将CString这样的不可使用类型都屏蔽起来,对外提供char *类型的来代替。
即:
class B
{
public:
   char *GetStr();

private:
   A a;   //在GetStr中调用A的操作,然后将CString转为char *

}


但是出现问题了,我只要引用了A的声明,在那个SDK程序中就会出现CString未定义的错误!!!

那我如何才能将A的声明也屏蔽掉???

也就是说,只要A的声明不在B的头文件B.h中出现,不把A的声明暴露出来就可以了。

有没有可能实现???

谢谢!

最佳答案

查看完整内容

你的想法是对的,但是实现却隐藏了你想法的天真性 adapter有输入和输出两种接口,并且对两边都要保持独立性,就是减少依赖。你把它做成com好了,输入,输出都是基本的com类型数据,这样就是个adapter了

论坛徽章:
0
2 [报告]
发表于 2009-05-22 11:47 |只看该作者
你的想法是对的,但是实现却隐藏了你想法的天真性
adapter有输入和输出两种接口,并且对两边都要保持独立性,就是减少依赖。
你把它做成com好了,输入,输出都是基本的com类型数据,这样就是个adapter了

论坛徽章:
0
3 [报告]
发表于 2009-05-22 12:48 |只看该作者

回复 #2 nicolas.shen 的帖子

谢谢!
呵呵,请楼上详解一下~
com目前局限于了解的水平,没用过~~~,如果改成com要多大工作量,而且我的类A也并不是很大~~~?

我天生也比较愚钝,理解力也比较差,不知道有什么方法,用尽可能少的时间,来完成我的目的???
(如果没办法的话,我就改得把A类重新改一下了~,不过因为在别处,有引用A类的,改了之后,也造成别的地方引引A类的地方也得改……,是不是我的设计仍然有问题??? 呵呵,前两天刚看了下设计模式,初学者…… )

谢谢!

论坛徽章:
0
4 [报告]
发表于 2009-05-22 14:03 |只看该作者
我的建议是还是改造下A类,减少它对各种类库的依赖性,这样它的适用范围就会很广,如果做成com的确需要做很多额外的事情,毕竟那些工作和你要的逻辑没多少关系。

论坛徽章:
0
5 [报告]
发表于 2009-05-22 15:41 |只看该作者
呵呵,想到办法了

就是将A只在B的实现中暴露。

在B的声明中,只有接口,而且B中并没有成员变量。

在B.cpp中,定义一个全局的类A的变量,然后在B的实现中用就可以了。

呵呵,这么简单的方法,我不知道为啥想了那么长时间才想到。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP