nak*_*iya 2 c++ design-patterns coding-style
我一直在研究这个插件系统.我以为我通过设计并开始实施.现在我想知道我是否应该重温我的设计.我的问题如下:
目前在我的设计中我有:
一个接口类,FileNameLoader用于加载我的应用程序需要加载的所有共享库的名称.即加载目录中的所有文件,加载XML文件中指定的所有文件,加载所有文件用户输入等.
LibLoader实际加载共享对象的Interface类.该类仅负责在给定文件名后加载共享对象.加载共享库可能需要多种方法.即使用RTLD_NOW/ RTLD_LAZY....,检查是否已经加载了lib等.
一个ABC Plugin,一旦提供了句柄,就从句柄到库加载我需要的函数.有很多方法可以改变.
PluginFactory创建Plugins 的接口类.
ABC PluginLoader是管理一切的母班.
现在,我的问题是我觉得FileNameLoader和LibLoader能进去Plugin.但这意味着,如果有人想改变RTLD_NOW,RTLD_LAZY他将不得不改变Plugin阶级.另一方面,我觉得这里的课程太多了.请提供一些意见.如有必要,我可以发布接口代码.提前致谢.
编辑:
在给出了一些想法之后,我得出的结论是更多接口更好(至少在我的场景中).假设有x的实现FileNameLoader,y的实现LibLoader,z的实现Plugin.如果我将这些类分开,我必须编写x + y + z实现类.然后我可以将它们组合起来以获得任何功能.另一方面,如果所有这些接口都在Plugin类中,我必须编写x*y*z实现类来获得所有可能的功能,这些功能大于x + y + z鉴于接口至少有2个实现.这只是它的一个方面.另一个优点是,当有更多接口时,接口的目的更加清晰.至少这是我的想法.
小智 5
我的c ++项目通常由实现一个或多个接口的对象组成.
我发现这种方法具有以下效果:
传递接口指针的好处是,您只暴露其他对象所需的功能.
COM大量使用接口,因为它的模块化设计对IPC(进程间通信)非常有用,可以促进代码重用并实现向后兼容性.
由于这些原因,Microsoft广泛使用COM并将其操作系统和最重要的API(DirectX,DirectShow等)基于COM,尽管它不是最容易访问的技术,但COM不会很快消失.
这些会帮助你自己的程序吗?由你决定.如果您要将大量代码转换为COM对象,那肯定是正确的方法.
你提到的接口的其他好东西 - 我自己判断它们对你有多大用处.就个人而言,我发现界面不可或缺.
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |