如何与策略设计模式互动

用户名

我想问几个设计模式的问题。让我们以策略设计模式为例:

class Printer{
public:
   void print(Message){

   }
};

class Message{
public:
   void print();
};

class SingleMessage : public Message{
   string s;
public:
   void print();
};

class Messages : public Message{
   vector<Message> v;
public:
   void print();
};

根据此模式的UML,打印机应具有方法print(Message)。我不理解的(对不起,如果这是一个愚蠢的问题)是我们需要调用Message类的打印方法还是什么?我们需要打印出消息,但是我们不能在Printer类中创建新的Message对象,因为那样的话它将是合成的。那我们该怎么办呢?

此外,也许您可​​以共享某种教程,以解释设计模式(如何使用它们,何时使用它们,等等)?

乌地那汀

我不理解的(对不起,如果这是一个愚蠢的问题)是我们需要调用Message类的打印方法还是什么?

是。Message :: print函数应该是抽象的,并在从Message继承的每个类中实现(作为不同的策略)。

我们需要打印出消息,但是我们不能在Printer类中创建新的Message对象,因为那样的话它将是合成的。那我们该怎么办呢?

您无需在打印机中创建新实例(即,此处不需要合成)。您在这里所做的就是通过决定将什么具体的实现传递到Printer :: print函数中来选择打印的实现策略。

此外,也许您可​​以共享某种教程,以解释设计模式(如何使用它们,何时使用它们,等等)?

通常,设计模式是针对反复出现的设计问题的惯用解决方案。您可以在Wikipedia上找到有关何时使用它们的详细信息。例如,此页面说:

“在计算机编程中,策略模式(也称为策略模式)是一种软件设计模式,由此可以在运行时选择算法的行为。”

附带说明一下,这不是策略模式的很好例子。更好的方法是抽象打印的含义,而不是消息的含义:

class Message{
public:
    void display(Printer& p) {
        p.print(*this); // what printing strategy is applied to
                        // display the message depends on the
                        // concrete type of the parameter (on what 
                        // Printer specialization you call
                        // the function with)
    }
};

struct Printer{
   virtual void print(Message& m);
};

struct BWPrinter: Printer {
     virtual void print(Message& m);
};

struct ColorPrinter: Printer {
     virtual void print(Message& m);
};

struct IOStreamPrinter: Printer {
    IOStreamPrinter(std::iostream& s);
    virtual void print(Message& m);
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何正确实施策略设计模式

来自分类Dev

策略设计模式

来自分类Dev

策略设计模式

来自分类Dev

如何使用静态方法作为策略设计模式的默认参数?

来自分类Dev

如何使用静态方法作为策略设计模式的默认参数?

来自分类Dev

处理请求的策略设计模式

来自分类Dev

策略设计模式-停止方法

来自分类Dev

处理请求的策略设计模式

来自分类Dev

这是否遵循策略设计模式

来自分类Dev

策略设计模式与简单的接口抽象?

来自分类Dev

如何选择设计模式

来自分类Dev

“策略设计模式”仅是多态性的基本用途吗?

来自分类Dev

策略和工厂设计模式有什么区别?

来自分类Dev

策略设计模式-使用对象填充C ++类

来自分类Dev

基于不同输入实现多种策略的设计模式

来自分类Dev

Android 中的 Context 是复杂策略设计模式的实现吗?

来自分类Dev

C++ 中的组件/策略模式,设计和实现

来自分类Dev

如何设计金盒游戏的策略和算法

来自分类Dev

这个设计模式如何称呼

来自分类Dev

如何实现工厂设计模式

来自分类Dev

如何使用设计模式实现多级继承

来自分类Dev

迭代器与访客设计模式以及如何

来自分类Dev

这个“容器设计模式”如何称呼?

来自分类Dev

OO设计模式:如何动态添加方法?

来自分类Dev

如何设计适当的GRPC发布 - 订阅模式?

来自分类Dev

如何使用设计模式实现多级继承

来自分类Dev

OO设计模式:如何动态添加方法?

来自分类Dev

如何解决这个问题(设计模式)

来自分类Dev

这个“容器设计模式”如何称呼?