上一节我介绍了简单工厂模式,该模式本质是在一个单独的类中创建轻量级对象,但无法掌控对象的创建过程,为解决这种问题,工程方法来了。
我先给出工程方法模式的定义:一种对象创建型模式,有一个父类,其中有一个抽象方法,该方法的意图就是创建实现了同一接口的子类对象,子类对象的实例化行为不再放在一个单独的类中,而是放在继承的子类中完成。
如果大家看过我简单工厂模式的文章,就很好理解上述定义了,这里我还是拿简单工厂模式中的示例来举例:简单工厂模式里面创建宝马汽车和奥迪汽车这两个对象是放在一个叫SimpleCarFactory的类中完成的,该类中提供了一个createCar方法,接收一个type类型的参数,由外部提供车的类型,最终完成汽车对象的创建,现在我们修改一下设计,依据工厂方法模式的定义,我们要把对象的创建分散在各个子类中去创建,步骤如下:
1、分别创建轮胎、发动机接口及其对应的实现类:
轮胎接口Tire
发动机接口Engine
宝马的轮胎BMWTire
奥迪的轮胎AudiTire
宝马的发动机BMWEngine
奥迪的发动机AudiEngine
2、创建抽象的汽车类及其实现类:
抽象汽车Car
宝马汽车BMWCar
奥迪汽车AudiCar
3、创建抽象的汽车4S点及其实现类,抽象类中有一个抽象方法createCar,返回具体的汽车对象,由子类来完成最终汽车对象的创建:
抽象4S点CarStore
宝马4S店BMWCarStore
奥迪4S店AudiCarStore
4、创建一个调用程序Context:
测试程序Context
经过以上步骤,我们就实现了工厂方法模式的应用,其UML结构如下:
UML
我们来总结一下,工厂方法有以下特点:
1、也是一种对象的创建型模式
2、将对象的创建分散到各个子类中去实例化,子类就能掌控对象实例化的过程,这点简单工厂模式无法做到
3、做到了开闭原则;即增加新的汽车类型无需修改现有代码,只需新增代码接口,简单工厂模式则无法做到,必须修改工程类SimpleCarFactory
END...