一、何为工厂方法模式?
- 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
- UML类结构图:
- 简单的代码实现:
interface Product{
void toProduct();
}
class Cocoa implements Product{
@Override
public void toProduct() {
System.out.println("制作汽水");
System.out.println("加配方");
System.out.println("封装成瓶");
}
}
interface ProductFactory{
Product FactoryMethod();
}
class CocoaFactory implements ProductFactory{
@Override
public Product FactoryMethod() {
return new Cocoa();
}
}
public class FactoryMethodQuick {
public static void main(String[] args) {
ProductFactory productFactory = new CocoaFactory(); //利用多态
Product product = productFactory.FactoryMethod();
System.out.println(product.getClass());
}
}
二、简单工厂模式和工厂方法模式的区别以及联系
简单工厂:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
以计算器的例子来画出UML类图:
上诉代码的实现:
class Operation{
public double numberA;
public double numberB;
public double getResult(){
return 0;
}
}
class Add extends Operation{
@Override
public double getResult() {
return numberA + numberB;
}
}
class Reduction extends Operation{
@Override
public double getResult() {
return numberA - numberB;
}
}
class OperationFactory{
public static Operation createOperation(String operation){
Operation resOperation = null;
switch (operation){
case "+" :
resOperation = new Add();
break;
case "-" :
resOperation = new Reduction();
break;
}
return resOperation;
}
}
public class SimpleFactoryMain {
public static void main(String[] args) {
Operation operation = OperationFactory.createOperation("+");
System.out.println(operation);
Operation operation1 = OperationFactory.createOperation("-");
System.out.println(operation1);
}
}
运行结果:可以看到根据传入的符号,所创建出的对象所属的类:
工厂方法模式下,计算器的UML类图:
- 区别: 简单工厂模式工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,去除了与具体产品的依赖,但是违背了开闭原则,而工厂方法模式,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来实现。
- 联系: 工厂方法模式是简单工厂模式的进一步抽象和推广。
三、总结
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类
实现例子: 计算器实现例子。