概述
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出
哪一种产品类的实例。
严格地来说,简单工厂模式并不是23种标准模式之一,使用这个模式可以把对象的创建和对象的使用分离开,工厂只负责对象的创建,客户端程序调用和使用对象,客户
端程序无需创建对象。这样对象的创建放在一起,方便维护和扩展。
模式结构
简单工厂模式包含如下角色:
Factory:工厂角色 (负责类的实例化)
Product:抽象产品角色 (接口,基类)
ConcreteProduct:具体产品角色 (具体的实现类)
代码举例
下面以鸟类进行举例,说明简单工厂类的基本实现。
/**
* Bird 接口(鸟类的基类 角色:Product)
*/
public interface Bird {
public void fly();
public void run();
}
下面是具体的产品角色类
/**
* 鸵鸟(不会飞,跑得快)
* 角色:ConcreteProduct
*/
public class Ostrich implements Bird {
@Override
public void fly() {
System.out.print("不会飞");
}
@Override
public void run() {
System.out.print("跑得快");
}
}
/**
* 鹦鹉(会飞,跑得慢)
* 角色:ConcreteProduct
*/
public class Parrot implements Bird {
@Override
public void fly() {
System.out.print("会飞");
}
@Override
public void run() {
System.out.print("跑得慢");
}
}
下面是工厂类
/**
* 鸟类工厂类
* 角色:Factory
*/
public class BirdFactory {
private static BirdFactory mBirdFactory;
public static final String BIRD_OSTRICH = "bird_ostrich";
public static final String BIRD_PARROT = "bird_parrot";
private BirdFactory() {
}
public static BirdFactory getInstance() {
if (mBirdFactory == null) {
mBirdFactory = new BirdFactory();
}
return mBirdFactory;
}
/**
* 获取一个bird实例
*
* @param birdType
* @return
*/
public Bird getBird(String birdType) {
switch (birdType) {
case BIRD_OSTRICH:
return new Ostrich();
case BIRD_PARROT:
return new Parrot();
default:
return null;
}
}
}
使用场景
工厂类负责创建的对象比较少;
客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。