艺术网站模板,不包括,建网站 几个链接,wordpress侧边栏怎么加php代码1. “对象创建” 模式
通过 “对象创建” 模式绕开new#xff0c;来避免对象创建#xff08;new#xff09;过程中所导致的紧耦合#xff08;依赖具体类#xff09;#xff0c;从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式 Factory MethodAbstract …1. “对象创建” 模式
通过 “对象创建” 模式绕开new来避免对象创建new过程中所导致的紧耦合依赖具体类从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式 Factory MethodAbstract FactoryPrototypeBuilder
2. Builder 构建器
2.1 动机Motivation
在软件系统中有时候面临着 “一个复杂对象” 的创建工作其通常由各个部分的子对象复杂对象由多个子部分构成用一定的算法构成由于需求的变化这个复杂对象的各个部分经常面临着剧烈的变化但是将它们组合在一起的算法却相对稳定。如何应对这种变化如何提供一种 “封装机制” 来隔离出 “复杂对象的各个部分” 的变化从而保持系统中的 “稳定构建算法” 不随着需求改变而改变
2.2 模式定义 将一个复杂对象的构建与其表示相分离使得同样的构建过程稳定可以创建不同的表示变化。 ——《设计模式》GoF 2.3 实例代码
// 房子基类
class House {// ....
};// 房子构造器基类
class HouseBuilder {
public:// 返回所构建的房子House* GetResult() {return pHouse;}virtual ~HouseBuilder() {}protected: House* pHouse;// 虚函数由不同的房子构建器进行override每个函数负责构建房子的某一个部分virtual void BuildPart1()0;virtual void BuildPart2()0;virtual void BuildPart3()0;virtual void BuildPart4()0;virtual void BuildPart5()0;
};// 石头类型房子具体类
class StoneHouse: public House {};// 石头类型房子的构建器具体类
class StoneHouseBuilder : public HouseBuilder {
protected:virtual void BuildPart1() {// pHouse-Part1 ...;}virtual void BuildPart2() {}virtual void BuildPart3() {}virtual void BuildPart4() {}virtual void BuildPart5() {}
};// 房子构建指挥者用来控制整个建造过程
// 它将用户与房子的建造过程隔离用户只要指出需要建造房子的类型即可
class HouseDirector {
public:HouseBuilder* pHouseBuilder;// 构造函数中传入具体的构建器这样构建出的房子类型也就确定了HouseDirector(HouseBuilder* pHouseBuilder) {this-pHouseBuilder pHouseBuilder;}// 建造房子的过程函数它是相对稳定的算法House* Construct() {pHouseBuilder-BuildPart1();for (int i 0; i 4; i) {pHouseBuilder-BuildPart2();}bool flag pHouseBuilder-BuildPart3();if(flag) {pHouseBuilder-BuildPart4();}pHouseBuilder-BuildPart5();return pHouseBuilder-GetResult();}
};2.4 结构Structure 2.5 要点总结
Builder 模式主要用于 “分步骤构建一个复杂的对象”。在这其中 “分步骤” 是一个稳定的算法而复杂对象的各个部分则经常变化。变化点在哪里封装哪里—— Builder 模式主要在于应对 “复杂对象各个部分” 的频繁需求变动。其缺点在于难以应对 “分步骤构建算法” 的需求变化。在 Builder 模式中要注意不同语言中构造器内调用虚函数的差别C vs. C#。