Java设计模式之——工厂方法模式

标签: 设计模式(Java)  java  设计模式

一、何为工厂方法模式?

  • 工厂方法模式(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类图:
在这里插入图片描述

  1. 区别: 简单工厂模式工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,去除了与具体产品的依赖,但是违背了开闭原则,而工厂方法模式,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来实现。
  2. 联系: 工厂方法模式是简单工厂模式的进一步抽象和推广。

三、总结

工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类
实现例子: 计算器实现例子。

下一篇 : Java设计模式之——抽象工厂模式

版权声明:本文为u011723584原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011723584/article/details/106998217