对于以下情况,原型设计模式是否适合采用这种方法 - 只寻找创作部分?

时间:2014-11-25 05:31:39

标签: c++ design-patterns

我正在写一个传输层嗅探器。这里将分析来自传输层的数据包。这里,传输层 - 数据包类型可以是 - UDP或TCP。此外,还会有很多tcp和udp数据包。所以,我需要继续创建和删除它。很多时候,我需要引用以前的TCP数据包。

我的解决方案 - 创建一个原型设计模式 - 基类 - 传输包和子类将是UDP和TCP。如果我从未收到UDP数据包,那么我将不会实例化它。 因此,我可以继续创建TCP或UDP类对象来分析数据包。

1 个答案:

答案 0 :(得分:0)

当您有许多派生类或类很复杂而且希望能够通过插入预先创建的原型来在运行时配置工厂时,原型模式最有用。

使用原型模式,您仍然需要继续创建和删除数据包对象。只是通过克隆原型来完成创建。

在你的情况下,如果只有两种类型的数据包并且它们不是太复杂而无法创建,我认为一个简单的工厂就足够了。

如果您发现创建和删除数据包对象会影响性能,则可能需要考虑Object PoolFlyweight pattern。使用对象池模式,您可以保留一组准备好使用的初始化对象,这样您就不必继续创建和删除对象。使用Flyweight模式,您根本不会为每个数据包创建一个对象,而是将每个数据包的状态保持在类之外。