首先,在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。这种进一步抽象化的结果,使这种工厂方法模式可以用来允许系统在不修改具体工厂角色的情况下引进新的产品,这一特点无疑使得工厂模式具有超过简单工厂模式的优越性。
二、结构图及各部分的功能
2)具体工厂角色:它含有和具体业务逻辑有关的代码,它实现了抽象工厂的所有接口,主要负责创建具体产品的对象。
3)抽象产品角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在java中一般有抽象类或者接口来实现。
4)具体产品角色:实现了抽象产品角色所有的接口,具体工厂角色所创建的对象就是此角色的实例。
三、代码实例
// 抽象产品角色
public interface Car {
public void dirve();
}
//具体产品角色public class BenZCar implements Car {@Overridepublic void dirve() {System.out.println("BenZCar is moving...");}}
//具体产品角色public class BMCar implements Car {@Overridepublic void dirve() {System.out.println("BMCar is moving...");}}
//抽象工厂public interface DriveFactory {public Car driveCar();}
public class BenZDriveFactory implements DriveFactory {@Overridepublic Car driveCar() {return new BenZCar();}}
public class BMDriveFactory implements DriveFactory {@Overridepublic Car driveCar() {return new BMCar();}}
public class Client {public static void main(String[] args) {DriveFactory factory = new BMDriveFactory();Car bmCar = factory.driveCar();bmCar.dirve();}}四、总结
可以看出工厂方法的加入,使得对象的数量成倍增长。当产品种类非常多时,会出现大量的与之对应的工厂对象,这不是我们所希望的。也许在下面情况下你可以考虑使用工厂方法模式:
1)当客户程序不需要知道要使用对象的创建过程;
2)客户程序使用的对象存在变动的可能,或者根本就不知道使用哪一个具体的对象。