工厂方法设计模式
概念
工厂方法模式(英语:Factory method pattern)是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。
工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。”
适用性
下列情况可以考虑使用工厂方法模式:
创建对象需要大量重复的代码。
创建对象需要访问某些信息,而这些信息不应该包含在复合类中。
创建对象的生命周期必须集中管理,以保证在整个程序中具有一致的行为。
UML
例子
一个汽车接口类,包含启动和停止两个方法:
public interface Car { public void run(); public void stop();}
工厂方法模式是提供多个工厂方法,分别创建对象(这点和简单工厂模式不同).
一个汽车抽象工厂类:
// 抽象的工厂类,定义了其子类必须实现的createCar()方法
public abstract class AbsCarFactory {
public abstract Car createCar();
}
定义一个福特汽车工厂类:
public class FordFactory extends AbsCarFactory {
@Override
public Car createCar() {
return new Ford();
}
}
定义一个丰田汽车工厂类:
public class ToyotaFactory extends AbsCarFactory {
@Override
public Car createCar() {
return new Toyota();
}
}
可以看到每个具体工厂类都实现了抽象工厂的createCar方法,用于返回具体的工厂实例.
最后贴上两辆汽车的实体:
public class Ford implements Car {
public void run() {
System.out.println("Ford 福特启动了...");
}
public void stop() {
System.out.println("Fordͣ 福特停止了...");
}
}
public class Toyota implements Car {
public void run() {
System.out.println("Toyota 丰田启动了...");
}
public void stop() {
System.out.println("Toyotaͣ 丰田停止了...");
}
}
客户端,测试工厂:
@Test
public void test5() throws Exception {
BenzFactory factory = new BenzFactory();
Benz benz = factory.createCar();
benz.run();
}
结果: