您的位置:首页 > 产品设计 > UI/UE

[设计模式]Abstract Factory和Builder

2006-01-07 00:24 309 查看
9/9/2005    看到董董的帖子,想起来一直说要写读书笔记来着。

    第一次读设计模式是在03年末,那次真的是囫囵吞枣,几乎没有收获,只是认识了原来C++可以这样设计程序。书被同学弄丢后一直没有温习,直到前些日子买回来了重读,才开始领略Design的魅力。

    先写写我对Abstract FactoryBuilder的理解吧。

    黑体字表示模式名,斜题字表示是抽象基类,小说一下,嘿嘿。另,文内图片主要引自网上。

    作为创建型模式,首要目标就是要吧对象构建这个复杂的过程抽象出来,无关出来,不然在后期变更,升级的时候,很容易无所适从。

    Abstract Factory的概念在于,把目标对象视为Product,负责构建对象的类视为Factory。对于所有的Product要遵循Abstract Product的接口,同样所有的Factory也要遵循Abstract Factory的
接口。这样的好处呢,就是对于客户(这里和以后说的客户不是指商业买卖那种概念的客户,是指使用这两套类来构建产品对象并使用产品对象的人,你写的东西是
你的,使用你的东西来完成他的东西的人便是你的客户)看到的,不再是具体的工厂和产品,而是都使用抽象工厂和抽象产品的接口,这是接口固定且一致,便容易
多了。
    而Builder的概念在于,由Director使用Builder提供的BuildXxx的接口一步一步的构建一个目标对象,当然,Builder只是个抽象基类,Director使用的其实是Builder的一个实例,但是它并不知道用的是哪个实例。每个实例产生的Product不同,所以Director同样也不知道产生了什么产品。

    BuilderAbstract Factory的区别有下:Builder是在Director的引导下,一步一步的构建对象;而Abstract Factory则是一次性创建对象。对于Abstract Factory,客户直接操作Factory和Product,所以两者都要抽象出接口;而Builder
式下,Director只操作Builder实例,不直接操作Product,所以Product是什么样,什么接口对于Director压根不关心,自
然也就不必抽象出接口咯(其实是因为Product的差异太大,不应该抽象出接口才产生了这个模式的,嘿嘿,为了说区别,偶就反一下啦~大家注意这儿是个
错误哦^_^)
    另外,Builder不局限于构建对象,同样适用于其他,比如你的主程序需要读写数据的时候,我们先说这个主程序是Director,读写数据抽象出一个类IO,我们称这个IO类是Builder,不妨就叫IOBuilder吧,然后呢,FileIOBuilder是IOBuilder的一个实例,DbsIOBuilder是IOBuilder的又一个实例,等等等,他们都遵循IOBuilder这个接口,对于主程序来说,操作IO完全透明,不知道我这样举例对不对,可能应该还有别的模式吧,呵呵,因为这个已经脱离了创建型模式的本意。

附两张图





上图为Abstract Factory



上图为Builder
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息