Simple Factory Pattern(简单工厂模式)
简单工厂模式的实质是由一个工厂类根据传入的参量,动态决定应该创建出哪一个产品类的实例。
简单工厂涉及到工厂角色、抽象产品和具体产品三个参与者。
1) 工厂(Creator)类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
2) 抽象产品(Product)角色:它一般是具体产品继承的父类或者实现的接口,它负责描述所有实例所共有的公共接口。
3) 具体产品(ConcreteProduct)角色:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
Java实例——手机简单工厂
我们首先定义Mobile接口:
public interface Mobile {
public voidcall();
}
然后定义具体的产品——Nokia和Motorola手机,它们都带有Mobile接口:
public class Nokia implements Mobile{
public voidcall(){
System.out.println("一部Nokia手机生成了");
}
}
public class Motorola implements Mobile{
public void call(){
// TODO Auto-generated method stub
System.out.println("一部Motorola手机生成了");
}
}
简单工厂类MobileFactory通过传入参数来确定返回哪种手机的相关信息:
public class MobileFactory {
public MobilegetMobile(String title) throws Exception{
if(title.equalsIgnoreCase("nokia")){
return newNokia();
}
else if(title.equalsIgnoreCase("motorola")){
return newMotorola();
}
else {
throw newException("no such "+title+"mobile found");
}
}
}
客户测试程序:
public class SimpleFactoryClient {
/**
* @param args
*/
public static voidmain(String[] args) {
// TODO Auto-generated method stub
try {
MobileFactory mf=newMobileFactory();
Mobile m;
m=mf.getMobile("nokia");
m.call();
m=mf.getMobile("motorola");
m.call();
} catch(Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
输出结果如下:
一部Nokia手机生成了
一部Motorola手机生成了
应用情景
1.工厂类负责创建的对象比较少。
2.客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心。