工厂模式原理
主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类。
工厂模式分类
主要分为三类:简单工厂、工厂方法、抽象工厂。
1 简单工厂
简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。
不修改代码的话,是无法扩展的。
工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。
抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。
具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。
代码如下:
/**
* 客户端
*/
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
SimpleFactory.createProduct("ProductA");
SimpleFactory.createProduct("ProductB");
SimpleFactory.createProduct("ProductC");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
/**
* @param 抽象产品
*/
public class AbstractProduct {
}
/**
* 简单工厂
* */
public class SimpleFactory {
public static AbstractProduct createProduct(String product) throws Exception{
if(product.equals("ProductA")) return new ProductA();
else if(product.equals("ProductB")) return new ProductB();
else return new ProductC();
}
}
/**
* 产品类
* */
public class ProductA extends AbstractProduct {
public ProductA(){
System.out.println("create product-a");
}
}
2 工厂方法
工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。
在同一等级结构中,支持增加任意产品。
3 抽象工厂
抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。
应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。