什么是工厂方法模式?
定义一个用于创建对象的接口,让子类决定实例化哪个类。
在任何需要生成复杂对象的地方,都可以使用工厂方法模式。用new就可以完成的创建无需要使用工厂方法模式。
工厂方法四大模块:
- 抽象工厂角色(AbstractFactory)
- 具体工厂角色(ConcreteFactory)
- 抽象产品角色(AbstractProduct)
- 具体产品角色(ConcreteProduct)
这个和下一个模式抽象工厂方法模式里是一样的,都有四类角色。
工厂方法的应用
结合例子来分析吧,汽车厂生产汽车吧,这个模式下假如我们的需求没有那么大,我们只生产国产的东风汽车。他有搭配轮胎和引擎的方法吧。
东风车厂类:
public interface IDongFengFactory{
IDongFengCar createCar();
}
public class DongFengFactory implements IDongFengFactory{
public IDongFengCar createCar(){
return new DongFengCar();
}
}
东风汽车类:
public interface IDongFengCar{
public void createTire();
public void createEngine();
}
public class DongFengCar implements IDongFengCar{
public void createTire(){
system.out.println("我是轮胎");
}
public void createEngine(){
system.out.println("我是引擎");
}
}
主类调用:
public static void main(String[] args){
IDongFengFactory df = new DongFengFactory();
IDongFengCar car = df.createCar();
car.createTire();
car.createEngine();
}
运行结果:
我是轮胎
我是引擎
至此一辆东风车就造好了,零件搭配齐全。
总的来说。工厂方法设计还是很实用的,代码系统结构清晰,将要生产的产品具体细节操作封装起来,使用者只关心调用接口就是,不用担心他汽车怎么造的过程。
但是工厂方法模式也有不好的地方就是我们要引入新的产品,比如新增加进口汽车就要重新写的产品类,还要引入新的接口,从而导致整体文件多起来了。