gpt4 book ai didi

c++ - 识别使用的设计模式名称

转载 作者:行者123 更新时间:2023-11-30 05:05:16 25 4
gpt4 key购买 nike

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

示例 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 << "\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");

}

最佳答案

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

第二个,您将一些编写Strategy 传递给UnixWriterWindowsWriter,这是上下文。所以它可以被认为是Strategy模式。但是你仍然可以通过签订写作策略契约(Contract)来改进它。因此,您的具体编写者应该只知道该父类(super class)型,而不是对具体实现的引用。这将使您的系统更加灵活。

关于c++ - 识别使用的设计模式名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48481810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com