本文共 1357 字,大约阅读时间需要 4 分钟。
1.介绍
这个模式,非常有用。
有时候,你的一个类,有许多函数功能,你又不希望在这个类里面再增加一个管理函数调用的接口,但你又不希望用全局变量来操作这批函数,怎么办?
你还可以用建造者模式。
2.具体使用说明
最经典的例子,莫过于《effective C++》条款23,宁以non-member,non-friend替换member函数。
我就是从这里学的建造者模式。虽然在Meyers大师的书中,没有在此处提到建造者模式,但我认为这里非常符合建造者模式的设计思路。
在书中的P100~P101提到:
在C++,比较自然的做法是.....所在同一个namespace(命名空间)内。要知道,namespace和classes不同,前者可跨越多个源码文件而后者不能。这很重要,....
将所有便利函数放在多个头文件内但隶属同一个命名空间,意味着客户可以轻松扩展这一组便利函数。
3.网络上常见的好理解的代码
class Builder { public: virtual void BuildHead() {} virtual void BuildBody() {} virtual void BuildLeftArm(){} virtual void BuildRightArm() {} virtual void BuildLeftLeg() {} virtual void BuildRightLeg() {} }; //构造瘦人 class ThinBuilder : public Builder { public: void BuildHead() { cout<<"build thin body"<BuildHead(); m_pBuilder->BuildBody(); m_pBuilder->BuildLeftArm(); m_pBuilder->BuildRightArm(); m_pBuilder->BuildLeftLeg(); m_pBuilder->BuildRightLeg(); } }; int main() { FatBuilder thin; Director director(&thin); director.Create(); return 0; }//
4. 我理解的建造者模式的代码
namespace WebBrowserStuff {
class WebBrowser {...};
void doSomething(WebBrowser& wb);
}
你可以把你要建造的全部函数功能,写道类里面。
然后,你把你要组装时,用到某些函数,写道namespace里面,这样,就非常方便自己组合了,用什么功能,不用什么功能,就在doSomething()这个函数里面,随意使用就好,完全不会破坏原来的类WebBrowser的封装性,实现了高内聚-低耦合。
------------------------
转载地址:http://rzoji.baihongyu.com/