《Java与模式》学习笔记(4)——Abstract Factory

抽象工厂(Abstract Factory)模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。
 
抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。
 
为了方便引进抽象工厂模式,特地引进一个新的概念:产品族(Product Family)。所谓产品族,是指位于不同产品等级结构中,功能相关联的产品组成的家族。
 
抽象工厂模式的结构图如下:
《Java与模式》学习笔记(4)——Abstract Factory_第1张图片
 
源代码:
public   interface  Creator  {
    
public ProductA factoryA();
    
public ProductB factoryB();
}


public   class  ConcreteCreator1  implements  Creator  {
    
public ProductA factoryA() {
        
return new ProductA1();
    }

    
public ProductB factoryB() {
        
return new ProductB1();
    }

}

 
public   class  ConcreteCreator2  implements  Creator  {
    
public ProductA factoryA() {
        
return new ProductA2();
    }

    
public ProductB factoryB() {
        
return new ProductB2();
    }

}

 
public   interface  ProductA  {
}


public   class  ProductA1  implements  ProductA  {
    
public ProductA1() {
    }

}

 
public   class  ProductA2  implements  ProductA  {
    
public ProductA2() {
    }

}

 
public   interface  ProductB  {
}


public   class  ProductB1  implements  ProductB  {
    
public ProductB1() {
    }

}

 
public   class  ProductB2  implements  ProductB  {
    
public ProductB2() {
    }

}
 
在以下情况下应当考虑使用抽象工厂模式:
1. 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。
2. 这个系统的产品有多于一个的产品族,而系统只消费其中某一族的产品(这一条是抽象工厂模式的原始用意)。
3. 同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。
4. 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。
 
当系统中的产品族增加时,抽象工厂模式是支持“开-闭”原则的;但对于产品等级结构的增加,抽象工厂模式不支持“开-闭”原则。

你可能感兴趣的:(java,Class,interface,产品)