识别使用的设计模式名称

时间:2018-01-28 00:00:18

标签: c++ design-patterns

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

示例1:该段代码可以说明" Builder"模式或它可能是"策略"一个?

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 << "\r\n"; }
};

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");

}

1 个答案:

答案 0 :(得分:1)

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

的识别键

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