标识使用的设计模式名称

identifying the design pattern name used

本文关键字:设计模式 标识      更新时间:2023-10-16

我想检查下面的示例(来自测试面试)是否对应于正确的设计模式名称:

示例 1:该代码段可以说明"构建器"模式还是"策略"模式?

FileStream* files = new FileStream("my_file.zip");
BufferedStream* bufferds = new BufferedStream(files);
ZipStream* zips = new ZipStream(bufferds);

示例2:下面的代码是否代表"策略"模式?

struct UnixText {
void write(string str) { cout << str; }
void lf() { cout << "n"; }
};
struct WindowsText {
void write(string str) { cout << str; }
void crlf() { cout << "rn"; }
};
struct Writer {
virtual void write(string str) = 0;
virtual void newline() = 0;
virtual ~Writer() {}
};
struct UnixWriter : Writer {
UnixWriter(UnixText* tx) { _target = tx; }
virtual void write(string str) { _target->write(str); }
virtual void newline() { _target->lf(); }
private:
UnixText* _target;
};
struct WindowsWriter : Writer {
WindowsWriter(WindowsText* tx) { _target = tx; }
virtual void write(string str) { _target->write(str); }
virtual void newline() { _target->crlf(); }
private:
WindowsText* _target;
};
int main()
{
Writer* writer = (g_IsUnix) ? (Writer*) new UnixWriter(new UnixText()) : (Writer*) new WindowsWriter(new WindowsText());
writer->write("Hello");
writer->newline();
writer->write("World");
}

第一个示例使用 I/O 流,它很好地使用了Decorator模式。在这里,它有一个构造函数,该构造函数采用同一抽象类或接口的实例。这是Decorator模式的识别键

第二个,你正在传递一些写作StrategyUnixWriterWindowsWriter这是上下文。因此,可以将其视为Strategy模式。但是您仍然可以通过签订写作策略合同来改进它。因此,您的具体编写器应该只知道该超类型,而不是对具体实现的引用。这将使您的系统更加灵活。