ps:在以下讲述简单工厂模式中,模仿的场景如下:我们有两个类Car和Broom类,我们不直接通过new来获取对象,我们通过一个工厂类Factory来获取想要的对象。类图和代码如下。
1、MoveAble接口
public interface Moveable {
void go();
}
2、Car类和Broom类
public class Broom implements Moveable{
@Override
public void go() {
System.out.println("broom flying......");
}
}
public class Car implements Moveable{
@Override
public void go() {
System.out.println("car is running....");
}
}
3、Factory类
public class Factory {
//单例工厂
public static final Factory factory = new Factory();
private Factory(){}
public Object getProduct(String name){
if ("car".equals(name)){
return new Car();
}
if ("broom".equals(name)){
return new Broom();
}
return null;
}
}
6、Main类(测试)
public class Main {
public static void main(String[] args) {
Factory factory = Factory.factory;
Car car = (Car) factory.getProduct("car");
car.go();
Broom broom = (Broom) factory.getProduct("broom");
broom.go();
}
}
总结:让获得者不需要明白创建对象的具体过程,而是通过给出你需要什么,从工厂直接进行提取即可。但是不易于扩展,若要创建的对象工厂不能生产,此时需要去修改工厂类的源码。