我即将实现文档生成器。我坚持遵循开放原则,这给我带来了一些麻烦。要求如下:
由于我选择了以下开放 - 封闭原则,我强烈希望避免使用switch语句。这意味着我需要为特定类型的文档和格式类型引入一些抽象和实现。
是否有必要提供m x n类实现,其中m是文档类型的数量,n是文档格式的数量?我觉得这是错误的做法。请问,请给我一些提示,如何正确设计这样的文件生成器?
答案 0 :(得分:0)
由于每种格式的行为完全不同,好的设计是通过实现一个通用界面为每个格式创建不同的类,比如说“IFormatter”。您可以注入界面' IFormatter'到需要调用文档格式化程序的客户端类。您可以通过不同方式负责对象创建。一个是简单的工厂方法(我个人不是工厂方法的忠实粉丝)。另一种方式是责任链。当匹配发现它将创建相应的对象时,您可以链接对象创建。
无论哪种方式,一旦构建了客户端类,您将永远不需要再次修改它。如果您想将文档格式化为另一种格式,那么就像通过实施IFormatter'来创建新类一样简单。接口
答案 1 :(得分:0)
我会给你一些提示
FormattedContent
这样的Value对象,它有2个属性: Format 和 Content 关于switch
..你有相当奇怪的约束。但你可以使用字典而不是开关!也许是抽象工厂。