工厂方法模式 应用最广:定义一个用于创建对象的接口,让子类决定实例化哪个类。在任何需要生成复杂对象的地方,都可以使用工厂方法模式。用new就可以完成的创建无需要使用工厂方法模式。
工厂方法四大模块:
抽象工厂角色具体工厂角色抽象产品角色具体产品角色。这个和下一个模式抽象工厂方法模式里是一样的,都有四类角色。
工厂方法的应用
结合例子来分析吧,汽车厂生产汽车吧,这个模式下假如我们的需求没有那么大,我们只生产国产的东风汽车。他有搭配轮胎和引擎的方法吧。
东风车厂类:
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(); }
运行结果:
我是轮胎 我是引擎
至此一辆东风车就造好了,零件搭配齐全。
总的来说。工厂方法设计还是很实用的,代码系统结构清晰,将要生产的产品具体细节操作封装起来,使用者只关心调用接口就是,不用担心他汽车怎么造的过程。
但是工厂方法模式也有不好的地方就是我们要引入新的产品,比如新增加进口汽车就要重新写的产品类,还要引入新的接口,从而导致整体文件多起来了。