摘要:
在工厂模式的例子中,静态成员函数static factory()迫使所有创建对象的操作都集中在一个地方,因此这个地方就是唯一需要修改代码的地方。然而,GoF强调工厂方法模式的理由是,可以使不同类型的工厂派生自基本类型的工厂。工厂方法模式事实上是多态工厂模式的一个特例。 #include <iostream>#include <map>#include <string>#include <vect... 阅读全文
摘要:
工厂模式强制用一个通用的工厂(factory)来创建对象,而不允许将创建对象的代码散布于整个系统。如果程序中所有需要创建对象的代码都转到这个工厂执行,那么再增加新对象时的所要做的全部工作就是只需修改工厂。这种设计是众所周知的工厂方法的一种变体。 #include <iostream>#include <stdexcept>#include <cstddef>#include <string>#i... 阅读全文
摘要:
职责链(Chain of Responsibility)模式:在提出一个请求时,一个链序列中的每个策略都试图满足这个请求。这个过程直到有一个策略成功满足该调用或者到达链序列的末尾才结束。 除了调用一个函数来满足某个请求外,链中的多个函数都有机会满足这个请求,因此它有点专家系统的意味。由于职责链实际上就是一个链表,它能够动态创建,因此它可以看做是一个更一般的动态构建的switch语句。 在这里可... 阅读全文
摘要:
模版方法模式是“坚持相同的代码”,而被覆盖的函数是“变化的代码”。然而,这种变化在编译时通过继承被固定下来。按照“组合优于继承”的格言,可以利用组合来解决将变化的代码从“坚持相同的代码”中分开的问题,从而产生策略(Strategy)模式。这种主法有一个明显的好外:在程序运行时,可以插入变化的代码。策略模式也加入了“语境”,它可以是一个代理类,这个类控制着对特定策略对像的选择和使用——就像状态模式一... 阅读全文