设计模式之工厂模式(简单工厂,工厂,抽象工厂)
工厂模式属于创建型模式中我们接触得比较多的一种模式,在我毕业的时候是SSH最流行的时候,其中的Spring就使用了工厂模式,Spring上下文就是相当于工厂类,通过上下文就可以拿到我们在xml中配置的类的实例。
工厂模式分为:简单工厂,工厂和抽象工厂。
简单工厂模式是由一个具体的工厂类,一个产品的接口或是抽象加上一个或多个具体的产品实现组成的。
public interface Product{
public Product createProduct();
}
public Class ProductA implements Product{
public Product createProduct(){
// 经过一系列操作创建一个对象
System.out.print("A产品创建");
return new ProductA();
}
}
public Class ProductB implements Product{
public Product createProduct(){
// 经过一系列操作创建一个对象
System.out.print("B产品创建");
return new ProductB();
}
}
public Class Factory{
public Product getProduct(String productName){
if("ProductA".equals(productName)){
return ProductA().CreateProduct();
}else if("ProductB".equals(productName)){
return ProductB().CreateProduct();
}else{
return null;
}
}
}
public Class Client{
new Factory().getProduct("ProductA");
}
简单工厂模式的好处在于,对于客户端而言,完全不需要了解对象的创建过程,只需要使用就可以了。
在简单工厂中,我们发现,如果需要在增加一个产品时,就需要更改原来的工厂类中的逻辑,这违背了开闭原则中的对修改关闭。
这时候就引入了工厂模式,工厂模式中,将Factory类抽象化了,我们将它设计为一个接口IFactory。在需要增加一个新的产品时,就可以通过实现IFactory接口,创建一个新的工厂类来提供新的产品。
工厂模式虽然提高的了扩展性,同样的也会引入大量的工厂类,所以在使用过程中是需要衡量的。
抽象工厂,是针对多个互相影响的产品族产生的一个模式,在抽象工厂中,抽象的产品是一个而是一组,每一个抽象产品代表一个产品族,它们之间是有关系的。在工厂抽象中,我们定义每个产品族的创建。产品的具体实现由它们的实现类完成。
简单工厂,工厂和抽象工厂都是创建类模式,它们的目的都是为了创建对象,便于对象管理,降低代码耦合。