工厂方法模式和简单工厂一样是一个很简单易懂的模式,简单工厂是传入不同的参数来获取想要的对象,工厂方法模式就是,一类或者一个产品有一个专门的工厂。
工厂方法模式的角色:
1. 抽象的产品接口
2. 抽象的工厂接口
3. 具体产品
4. 生产具体产品的工厂
下面上代码,以生产汽车为例,我们要分别生产奔驰汽车和大众汽车:
汽车接口:
public interface Car {
void run();
}
汽车工厂接口:
public interface CarFactory {
Car createCar();
}
奔驰汽车和大众汽车实现类:
public class Benz implements Car {
public void run() {
System.out.println("我是奔驰车,我以很快的速度在运行");
}
}
public class VW implements Car {
public void run() {
System.out.println("我是大众车,我以比较快的速度运行");
}
}
奔驰汽车工厂和大众汽车工厂实现类:
public class BenZFactory implements CarFactory {
public Car createCar() {
return new Benz();
}
}
public class VWFactory implements CarFactory {
public Car createCar() {
return new VW();
}
}
测试代码:
public class FactoryMethodTest {
public static void main(String[] args) {
CarFactory carFactory;
carFactory = new BenZFactory();
Car benz = carFactory.createCar();
benz.run();
carFactory = new VWFactory();
Car vw = carFactory.createCar();
vw.run();
}
}
测试结果:
我是奔驰车,我以很快的速度在运行
我是大众车,我以比较快的速度运行
工厂方法模式优点:
1. 体现单一职责原则,一种工厂只生产一种商品
2. 提现开闭原则,增加产品就要增加工厂,对修改关闭,对扩展开放
3. 迪米特原则,里氏替换,依赖倒置,都有体现,但是接口隔离还是没有充足的体现
缺点:
1. 虽然工厂方法模式是符合开闭原则的,但是同时也是它的缺点,因为如果有上千上万个产品,会类爆炸。