• 从Client角度来看工厂方式,抽象工厂和建造者


    1、工厂方法

    Client调用父类提供的接口,但是需要根据不同的参数,获得不同的子类实例。

    例如:Client是一个智能手机测评人,他需要测试不同品牌智能手机的功能,如打电话、照相等。作为测评人,
    Client不需要知道手机怎么生产的,他只需要从某东下订单,买一些华为、小米或苹果手机就可以了。

    上面,手机就是父类,手机功能就是接口,某东就是工厂方法,华为等品牌就是参数,华为手机等就是子类实例。
    关键:一个父类,一个工厂,多个子类。

    2、抽象工厂

    Client调用一组父类接口(配套使用),但是需要根据不同的参数,获得对应的一组子类实例。

    例如:Client是一个室内设计师,他的客户可能会要求使用的家电是同一品牌。但Client其实是不用管用的是什么牌子的,
    他只需要设计电视应该放在哪,冰箱应该放在哪。在设计好之后,再到不同品牌的商城取货就行了。

    这里,各种家电就是一组父类。商城就是抽象工厂,具体品牌商城就是工厂实例。(可以给各个抽象工厂建一个工厂方法)
    关键:N组父类,N个工厂,N*M个子类,配套使用。

    3、构建者

    Client调用父类提供的接口,但是根据不同参数,不仅获得不同子类,同时调整子类的生成方式,进而影响子类的表现。

    例如:Client还是一个智能手机测评人,但是更出名,要求也更高,他希望获对手机有一些改动,例如root,统一使用原生系统等。
    这时业务比较复杂,Client需要一个助理(Director),用来获得Client所需要的各种手机。但助理不会root,也不会刷机,
    所以需要每个品牌厂家派一个Builder来处理这些问题。

    相比工厂方法,这里多了一个Director,而工厂类也被各种类型Builder代替。构建者会影响子类的生成。Client只需要和Director打交道。
    关键:一个子类一个Builder,参数影响子类实例化。

    总结:以工厂方法为基础。构建者多了一个功能,它影响了子类的实例化,也因此多了一个Director,并用多个Builder替换了Factory。
    抽象工厂相当于有多个工厂方法,所以需要一个抽象工厂来提供统一接口。不同工厂提供的一组产品使用方式一样,但可能需要配套使用。

  • 相关阅读:
    zookeeper使用和原理探究(一)
    Zookeeper基本原理
    论照顾小孩与项目管理
    perl启动后台进程
    Oracle数据库迁移
    C# 语言Pagerank两种实现
    没文化真可怕--Silverlight 列冻结
    oracle中使用SQL递归语句的例子
    Visual Studio 2010 智能跟踪文件目录
    oracle wm_concat函数的应用(多行合成一行)
  • 原文地址:https://www.cnblogs.com/kohlrabi/p/9202798.html
Copyright © 2020-2023  润新知