设计模式梳理——工厂方法模式

一、概述

       代理模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。。

核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

二、UML图示

三、编程实现

       该程序主要通过模拟代理追求女生的功能实现。

1、工厂接口

public interface IFactory {
    Operation createOperation();
}

2、工厂实现类

2.1 加法工厂

public class AddFactory implements IFactory {
    @Override
    public Operation createOperation() {
        return new OperationAdd();
    }
}

2.2 减法工厂

public class SubFactory implements IFactory {
    @Override
    public Operation createOperation() {
        return new OperationSub();
    }
}

2.3 乘法工厂

public class MultFactory implements IFactory {
    @Override
    public Operation createOperation() {
        return new OperationMult();
    }
}

2.4 除法工厂

public class DivFactory implements IFactory{
    @Override
    public Operation createOperation() {
        return new OperationDiv();
    }
}

3 功能操作类

public class Operation {
    private int numberA;
    private int numberB;

    public int getNumberA() {
        return numberA;
    }

    public void setNumberA(int numberA) {
        this.numberA = numberA;
    }

    public int getNumberB() {
        return numberB;
    }

    public void setNumberB(int numberB) {
        this.numberB = numberB;
    }
    public int getResult(){
        int result = 0;
        return result;
    }
}

4 具体操作方法

4.1 加法操作

public class OperationAdd extends Operation {

    @Override
    public int getResult() {
        int result = 0;
        result = super.getNumberA() +super.getNumberB();
        return result;
    }
}

4.2 减法操作

public class OperationSub extends Operation {

    @Override
    public int getResult() {
        int result = 0;
        result = super.getNumberA() - super.getNumberB();
        return result;
    }
}

4.3 乘法操作

public class OperationMult extends Operation {

    @Override
    public int getResult() {
        int result = 0;
        result = super.getNumberA() * super.getNumberB();
        return result;
    }
}

4.4 除法操作

public class OperationDiv extends Operation {

    @Override
    public int getResult() {
        int result = 0;
        try {
            result = super.getNumberA() / super.getNumberB();
        }catch (Exception e){
            System.out.println("除数不能为0.");
        }
        return result;
    }
}

5、测试类

public class Test {
    public static void main(String[] args) {
        IFactory iFactory = new AddFactory();
        Operation operation = iFactory.createOperation();
        operation.setNumberA(10);
        operation.setNumberB(5);
        double result = operation.getResult();
        System.out.println(result);
    }
}

4、工厂方法与简单工厂区别

   工厂方法模式把简单工厂的内部逻辑判断移到了客户端代码来进行。
   工厂方法模式是简单工厂模式的衍生,首先完全实现开放-封闭原则,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。

注:参考文献《大话设计模式》程杰著。

猜你喜欢

转载自blog.csdn.net/sinat_35322593/article/details/82622811