今天来讲讲设计模式中的三种工厂模式——简单工厂模式、工厂模式和抽象工厂模式。
简单工厂模式
简单工厂模式并不属于GoF23种模式,简单工厂模式的定义为:简单工厂模式又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例,简单工厂模式专门定义了一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式的结构图
我们通过这张结构图来了解简单工厂模式中的各个角色:
1、Factory(工厂角色)
工厂角色也就是工厂类,它是简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外部直接调用,创建所需要的产品对象。工厂角色需要提供一个静态方法factoryMethod()(PS:命名无所谓,但是要有一个静态方法去实现工厂的职责),它返回一个抽象产品类Product,所有的具体产品类都是抽象产品类的子类。
2、Product(抽象产品角色)
抽象产品角色是简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的公共接口,它的引入能提高系统的灵活性,使得工厂类只需要提供一个工厂方法。抽象产品类可以是一个接口,也可以是一个抽象类。
3、ConcreteProduct(具体产品角色)
具体产品角色是简单工厂模式的创建目标,所有创建的对象都充当这个角色的某个具体类的实例。
简单工厂模式的实例
下面我们通过一个电视机工厂的实例来加深简单工厂模式的理解。
工厂类 TVFactory
public class TVFactory {
public static TV productTV(String brand) throws Exception{
if(brand.equalsIgnoreCase("Haier")){
System.out.println("TVFactory product HaierTV!");
return new HaierTV();
}
else if(brand.equalsIgnoreCase("Samsung")){
System.out.println("TVFactory product SamsungTV!");
return new SamsungTV();
}
else{
throw new Exception("There is no such brand!");
}
}
}
抽象产品类 TV
public interface TV {
public void play();
}
具体产品类HaierTV、SamsungTV