我想问几个设计模式的问题。让我们以策略设计模式为例:
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] 删除。
我来说两句