您经常使用的是Gang Of Four Design Pattern,但在其他人的设计中几乎没有使用过吗?如果可能,请描述一个简单的示例,其中此模式可能很有用。它不一定是Gang of Four模式,但如果您选择非GoF模式,请包含指向模式描述的超链接。
换句话说:
我或其他对主要模式有所了解的人有哪些好/有用的设计模式可能还不知道?
答案 0 :(得分:8)
答案 1 :(得分:5)
战略模式可能吗?我看不到很多人使用它,当计算改变或可以累积在一起时它非常有用。当计算的一部分可以被另一个计算替换时,我使用它。通常在用于企业产品费率的程序中。
以下是一些文档:
答案 2 :(得分:5)
访客声誉不佳,部分原因是存在一些实际问题
部分是由于GOF书中的阐述,强调遍历结构而不是将虚函数添加到封闭的层次结构中。
这意味着在适当的情况下不会考虑它,例如解决静态类型语言中的双重调度问题。示例:在C ++中传递系统的消息或事件,其中消息的类型是固定的,但我们希望通过添加新的收件人来扩展。这里,消息只是结构,所以我们不关心封装它们。 SendTo()
不知道Message
或MessageRecipient
的类型。
#include <iostream>
#include <ostream>
using namespace std;
// Downside: note the cyclic dependencies, typically expressed in
// real life as include file dependency.
struct StartMessage;
struct StopMessage;
class MessageRecipient
{
public:
// Downside: hard to add new messages
virtual void handleMessage(const StartMessage& start) = 0;
virtual void handleMessage(const StopMessage& stop) = 0;
};
struct Message
{
virtual void dispatchTo(MessageRecipient& r) const = 0;
};
struct StartMessage : public Message
{
void dispatchTo(MessageRecipient& r) const
{
r.handleMessage(*this);
}
// public member data ...
};
struct StopMessage : public Message
{
StopMessage() {}
void dispatchTo(MessageRecipient& r) const
{
r.handleMessage(*this);
}
// public member data ...
};
// Upside: easy to add new recipient
class RobotArm : public MessageRecipient
{
public:
void handleMessage(const StopMessage& stop)
{
cout << "Robot arm stopped" << endl;
}
void handleMessage(const StartMessage& start)
{
cout << "Robot arm started" << endl;
}
};
class Conveyor : public MessageRecipient
{
public:
void handleMessage(const StopMessage& stop)
{
cout << "Conveyor stopped" << endl;
}
void handleMessage(const StartMessage& start)
{
cout << "Conveyor started" << endl;
}
};
void SendTo(const Message& m, MessageRecipient& r)
{
// magic double dispatch
m.dispatchTo(r);
}
int main()
{
Conveyor c;
RobotArm r;
SendTo(StartMessage(), c);
SendTo(StartMessage(), r);
SendTo(StopMessage(), r);
}
答案 3 :(得分:4)
许多新开发者似乎很难理解访客模式。当我有可能获得Country&gt; State&gt; City&gt; House的价值时,我正在使用它进行微积分。这样我就不需要改变每个子集合中有多少数据了。我只选择合适的访客,最终的答案是获得任何国家,州或城市的数量。
答案 4 :(得分:2)
如果我们谈论的是非GOF模式,那么Monitor Object就是并发OO编程的'Hello World'。我很惊讶有多少程序员管理不听,或者更喜欢设计他们自己的ad hoc同步方案。