[设计模式]Abstract Factory和Builder

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值