总结
1. 实现的Hook
这几个模式里,或多或少都跟 接口有关,这使得我们可以把一部分工作 委托给子类去实现。
这一点我们会在后边的 诸如桥模式、模版模式等中再次见到
善用接口
2. 隐藏可变部分
隐藏 可变的部分或者可能会变化的部分,可以提供更安全的接口和更简单的环境去 更改实现
Builder 模式
核心在于 隐藏 复杂对象创建过程过程中的细节
Builder 隐藏了 ComplicatedObj的创建细节。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| struct ComplicatedObj; class Builder{ ComplicatedObj * obj; Builder();
virtual void AddInt(int i); virtual void AddFloat(double f); virtual ComplicatedObj * GetObj(); } struct ComplicatedObj{ std::vector<std::variant<int,char *>> comps; };
struct ComplicatedObj{ std::vector<std::variant<int,double>> comps; };
Builder::Builder{ obj = new ComplicatedObj; } Builder::AddInt(int i){ obj->comps.push_back(i); } Builder::AddFloat(double f){ obj->comps.push_back(f); } Builder::GetObj(){ auto ret = obj; obj = 0; return ret; }
|