学习笔记之设计模式:抽象工厂

如模式名称所表达的,抽象工厂模式就像我们现实生活中的工厂一样,它是用于制造产品的,在此模式中产品就是类型的实例,而且这些实例具有关联性,它们每个像一个家族中的成员。

这里提到的是抽象工厂,那么在使用时必然是通过具体的工厂生产实例,通过赋予工厂变量不同的具体工厂我们就可以灵活生产不同产品家族的实例。

在达到灵活生产不同实例这个目的前,还需要对工厂的产品抽象化,给同种产品一个公共接口,这些抽象出的接口作为工厂类中用于生产实例的方法的返回值,至此抽象工厂的结构也就清晰了。

结构图:

 

适用场合: 

  1. 程序需要独立于产品的生产,面向产品的抽象接口编程而不是面向具体产品编程;
  2. 需要生产多种产品对象,且这些产品具有相关性而程序需要这种相关性约束;
  3. 需要使用多个产品家族中的一个家族;
  4. 对同一种产品而言存在多个不同的具体产品。
抽象工厂的优缺点:
  1.  它隔离了具体的产品类型。在程序中使用的是产品的抽象接口,具体产品的实例化由工厂负责,当产品生产有变化的时候,它所波及的仅仅是某具体工厂,而程序中其他部分可以保持不变。
  2. 易于改变程序中使用的产品家族。在程序中对工厂的引用使用抽象工厂作为变量类型来维持,这样我们可以仅仅赋予工厂变量一个不同的具体工厂就可以改变在程序中使用的产品。
  3. 提高产品间的一致性。在工厂中,我们可以生产多种产品,而且这些产品之间具有关联性,为了保持生产出的具体产品的一致性,我们可以将这种一致性放在具体工厂中实现,那么在生产时只要是同一工厂生产的产品,它们之间的一致性就得到保证,将一致性关系集中在一处管理相对于多处管理自然是更容易的。
  4. 向产品家族中添加额外的成员比较困难。因为具体工厂是实现同一工厂接口,那么添加成员意味着需要修改工厂接口,由此每个具体工厂都需要修改。 

 

posted @ 2011-03-01 23:15  hiearth  阅读(312)  评论(0编辑  收藏  举报