1 工厂方法模式定义:
定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中
2 模式的结构与实现
2.1 工厂方法模式的主要角色:
抽象工厂:提供了创建产品的的接口,调用者通过它访问具体工厂的工厂方法来创建产品
具体工厂:主要是实现了抽象工厂中的抽象方法,完成具体产品的创建
抽象产品:定义了产品的的规范,描述了产品的主要特性和功能
具体产品:实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应
其结构图如下:
2.2 模式的实现
public class FactoryTest {
//抽象产品
interface Car {
public void getCar();
}
//BMW 具体工厂类
public static class BMW implements Car{
@Override
public void getCar() {
System.out.printf("来一辆BMW!");
}
}
//BYD 具体工厂类
public static class BYD implements Car {
@Override
public void getCar() {
System.out.printf("来一辆BYD!");
}
}
//抽象工厂
interface CarFactory{
public Car getCarByFactory();
}
// BMW 具体工厂类
static class BMWfactory implements CarFactory{
@Override
public Car getCarByFactory() {
return new BMW();
}
}
// BYD 具体工厂类
static class BYDfactory implements CarFactory{
@Override
public Car getCarByFactory() {
return new BYD ();
}
}
public static void main(String[] args) {
Car bmw= new BMWfactory().getCarByFactory();
Car byd= new BYDfactory().getCarByFactory();
bmw.getCar();
byd.getCar();
}
}
3 模式的特点:
3.1 优点:
1)用户只需要知道具体工厂的名称就可得到所要的产品,无需知道产品的具体创建过程;
2)在系统增加新的产品时只需要添加具体产品类和对应的具体工厂,无需对原工厂进行任何修改,满足开闭原则
3.2 缺点:
1)每增加一个产品就要增加一个具体产品类和对应的具体工厂,增加了系统的复杂度