对于某个函数在XP和2000下必须使用不同的代码实现,使用Strategy模式是否合适

poweruser 2006-11-10 01:44:25
现在有一个功能,比如获取当前端口状态,在2000和XP下实现方式不同,我想对其进行封装,采用Strategy模式是否适合?
谢谢!
...全文
534 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2007-02-25
  • 打赏
  • 举报
回复
恐怕不如把不同的东西抽到2个dll里,根据os加载相应dll。
lyg_zy 2007-02-25
  • 打赏
  • 举报
回复
同意楼上!
sinall 2007-02-13
  • 打赏
  • 举报
回复
合适,能解决掉问题就合适。
要说的话,abstract factory也是一种strategy。

不过单就楼主的问题的话,我觉得就是strategy。
如果楼主的整个系统中充斥了大量的xp或2k不同实现的内容,那么abstract factory是个好选择。
qhgary 2007-02-02
  • 打赏
  • 举报
回复
这需要什么模式???最基本的C++的多态不就实现了么.
弄一个抽象类或者接口出来,然后分别继承出xp和2000下的实现类.里面重载相应的函数,提供不同的实现.

使用的时候只返回抽象类或者接口的指针,不就完了么?
dananhai 2006-11-19
  • 打赏
  • 举报
回复
当有更好的办法让这里(可能是不重要的)性能得到提高,但一定是损害了其他好处作前提的。
dananhai 2006-11-19
  • 打赏
  • 举报
回复
导致程序性能的因素通常只有20%(一种说法,当然是指关键的部分,如:执行频繁,持续时间长等),各种利弊当然要权衡,你的抉择要看这里你更重视那个质量属性(如:性能、可扩展、可维护等)。虚函数性能损失也的分跟谁比
xlsue 2006-11-18
  • 打赏
  • 举报
回复
太多的虚拟函数会导致性能的下降,我觉得用包装器外观会好些。参考POSA2&ACE
dananhai 2006-11-16
  • 打赏
  • 举报
回复
把service替换成你说的getPort()你会更好理解。
dananhai 2006-11-16
  • 打赏
  • 举报
回复
1、模式无偏见,都有适合位置。除此交流之用。
2、Abstract Factory适合系列产品的生成。
3、用Bridge接口实现分离,增加灵活性。Abstract Factory会用到。
4、Strategy表示类整体功能的部分实现。

代码更形象:
class Strategy_Impl
{
public:
virtual ~Strategy_Impl(){}
virtual int service() = 0;
}

class Strategy_Impl_XP : public Strategy_Impl
{
//...
}
class Strategy_Impl_2K : Strategy_Impl
{
//...
}

class Service
{
public:
void Service(Strategy_Impl *impl);
//
//
void doSomething()
{
impl_->service();
}
private:
Strategy_Impl *impl_;
}

///
void Client()
{
/// 可在运行时决定策略,当然这里不是。
Strategy_Impl_2K s2k_;
Service s(&s2k_);
s.doSomething();
}
jixingzhong 2006-11-15
  • 打赏
  • 举报
回复
使用策略模式可以在一定程度上带来便捷,
不过,
响应的结合其他的内容,
可能更合适 ~~
仰望星空WU 2006-11-15
  • 打赏
  • 举报
回复
跨平台,呵,最好用的就是typedef
或者ifdef define endif
xlsue 2006-11-15
  • 打赏
  • 举报
回复
根据具体的语境
xlsue 2006-11-13
  • 打赏
  • 举报
回复
桥模式,包装器外观+策略化加锁,参考POSA2
nule 2006-11-13
  • 打赏
  • 举报
回复
是啊,你想达到什么样的封装效果啊
北极猩猩 2006-11-13
  • 打赏
  • 举报
回复
这个问题的解决方案很多,需要说的更详细一些。

上面各位的回答应该说都只说到了一部分。楼主还是把情况说的更清楚一点吧。
  • 打赏
  • 举报
回复
动态多态嘛,很明显用Factory系列好一些
突击召唤师 2006-11-10
  • 打赏
  • 举报
回复
程序启动的时候就觉得了要使用哪种方法,而不是动态选择,所以只要建立一次对象就可以了。
突击召唤师 2006-11-10
  • 打赏
  • 举报
回复
我比较喜欢Abstract Factory -__-

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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