工厂方法模式与抽象工厂模式的分析与比较

    这两天又了解了工厂方法模式与抽象工程模式。我习惯把一些东西对比分析,这样理解会更加深刻。

工厂方法模式的组成成员:一个工厂类、一个产品接口、若干实现接口的具体产品类;
   
工厂方法模式的特点:           
    产品接口:
        将产品的公共属性和方法抽象出来;
    具体产品类:
        实现产品接口;
    工厂类:
        产生产品的方法,一般通过反射获取产品,返回产品接口类型;
       

抽象工厂模式的组成成员:一个工厂接口、若干个实现工厂接口的实体工厂、一个产品接口、若干个抽象产品、若干个实体产品;

抽象工厂模式的特点:   
    产品接口:
        包含公共的产品属性和方法;
    抽象产品:
        产品分类,每一种产品都有一个实现产品接口的抽象产品类;
        实现产品接口中一部分公共方法,这部分是这一类产品所共有的;
    实体产品:
        继承某个抽象产品类,并实现抽象类中未实现的接口方法;   
    工厂接口:
        包含公共的生成产品的方法,一般通过反射获取产品实例,返回产品接口类型;
    实体工厂:
        实现抽象工厂的方法,只生产某种类别的产品;
        有多少个抽象产品,工厂中就有多少个方法。

    由以上分析看来,在工厂方法模式中添加产品的类别,以及生成不同类别产品的工厂,就成了更具有普遍意义的抽象工厂模式。

    抽象工厂模式中有两个重要概念:产品族和产品结构。
    简单理解为产品族即具体的产品,产品结构即产品的分类。     
    增加产品族只需要增加工厂就OK;增加产品结构则需要添加新的产品类型,所有的工厂都要添加产生新类型产品的方法。    
    如:人可以分为男人和女人,同时可分为富人和穷人。
    假设处理为:富人类和穷人类;生产男人的工厂和生产女人的工厂。
    添加“人妖”或者“太监”就只需要添加工厂就OK;而添加“超级富豪”或者“超级穷光蛋”则需要在已有的工厂中,除了“生产富人”和“生产穷人”之外,还要添加“生产超级富豪”或者“生产超级穷光蛋”的方法。
    所以合理的做法应该是:男人类和女人类;生产富人的工厂和生产穷人的工厂。因为性别比较稳定,基本上不会变动(虽然出现了春哥和著姐等大腕,但大多数人还是正常的),这种处理方式更能支持ocp原则。

你可能感兴趣的:(抽象工厂模式)