我试图理解构建器模式的用法,因此调用分离是分组中的用法类型。以下是我的发现:
但是GoF的建筑工人呢?使用导演、抽象生成器和不同的实现。在生产中,我从未见过这样的实施。你见过这样的例子吗?
发布于 2016-09-11 20:02:00
理解GoF设计模式的一个关键是它们的意图。对于建筑商来说,它是:
将复杂对象的构造与其表示分开,以便相同的构造过程可以创建不同的表示。
在查看GoF提出的解决方案时,最令人震惊的是部件的单独构建和组装:该结构区分了Director和Builder,并支持一步一步的构造:
虽然非常有用,但我认为这些示例只关注模式的一个方面,而忽略了真正的意图。因此,通过合并Director和Builder或Builder和ConcreteBuilder,它们的结构看起来很简单。
对于GoF来说,不仅是要逐步构建Director和Builder之间的分离,还包括Builder和ConcreteBuilded之间的分离:
Builder提供了多态/虚拟buildPart()方法。而getResult()获取最终产品是ConcreteBuilder的一种方法,它不包含在抽象Builder的S接口中,因此可以使用不同的参数或返回不同的类型。Client调用Director来构造对象并触发部件的构建(可能使用临时对象),但是要由客户端直接从ConcreteBuilder调用getResult()。Director。这清楚地表明,这种模式并不适用于构建部件和组装整体(毕竟,它只不过是一次简化提供所有元素的助手),而更多的是使用相同的构造部件过程返回非常不同的“表示”(类)。
的应用
在现实生活中,典型的用途是构建具有不同类型的实现/表示的复合对象,例如不同的图形表示/视图(例如实体/关系或UML模型)、不同的输入或输出格式(例如JSON或XML文档)或编码(例如ASCII 16/32)。
例如,一个具体的用途可以是ADO.net和DbCommandBuilder,它由具体的SqlCommandBuilder、OracleCommandBuilder、ODBCCommandBuilder实现,以生成特定于db的命令。
https://softwareengineering.stackexchange.com/questions/330758
复制相似问题