标识使用的设计模式名称
identifying the design pattern name used
我想检查下面的示例(来自测试面试)是否对应于正确的设计模式名称:
示例 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
模式的识别键
第二个,你正在传递一些写作Strategy
到UnixWriter
,WindowsWriter
这是上下文。因此,可以将其视为Strategy
模式。但是您仍然可以通过签订写作策略合同来改进它。因此,您的具体编写器应该只知道该超类型,而不是对具体实现的引用。这将使您的系统更加灵活。
相关文章:
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 资源管理设计模式
- 用于在回调中调用解析器的设计模式
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 在这种情况下我应该使用哪种设计模式
- C++中物体改变识别的设计模式?
- 确保所有构造函数调用相同的函数 c++ 设计模式
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- 设计模式,以避免不必要地添加抽象函数以适应新功能
- 工厂设计模式优化
- 使用C++模板的数据映射器设计模式
- 为什么以及如何使用原型设计模式
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- 在C++中创建观察器设计模式的好方法
- 现代C++在多大程度上消除了对设计模式的需求?
- 对于存储另一个类所需信息的类,例如其构造,是否有设计模式?
- 下面抽象工厂设计模式的实现是正确的吗
- sql记录集函数的状态设计模式
- 是否有可以处理方法调用依赖关系的设计模式?
- 标识使用的设计模式名称