美文网首页
设计模式(简单的工厂模式)

设计模式(简单的工厂模式)

作者: 无尘粉笔 | 来源:发表于2020-05-07 20:07 被阅读0次

先来熟悉一下面向对象的三大特征:封装,继承,多态。

我们原来的所写的程序,不容易维护,灵活性差,不容易扩展,更谈不上复用。
学习了面向对象的编程思想,就开始考虑通过封装,继承,多态把程序的耦合度降低,开始使用设计模式使得程序更加灵活。并且易于复用。

例如一个非常简单的计算器

public class TestController {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数字A");
        int a = scanner.nextInt();
        System.out.println("请输入运算符");
        String c = scanner.next();
        System.out.println("请输入数字B");
        int b = scanner.nextInt();

        if (c.equals("+")){
            System.out.println("结果:" + (a+b));
        }
        if (c.equals("-")){
            System.out.println("结果:" + (a-b));
        }
        if (c.equals("*")){
            System.out.println("结果:" + (a*b));
        }
        if (c.equals("/")){
            System.out.println("结果:" + (a/b));
        }
    }
}

我们先来看看这个代码的几处问题,
1.命名不规范ABC不知道是什么

           if(){}
           if(){}

后面的判断也重复三次
3.当除法的除数为0报错。

下面我们来进行一下优化

首先写一个父类

package wcfb.factory;

/**
 * 运算类
 */
public class Operation {

    private double numberA = 0;
    private double numberB = 0;

    public double getNumberA() {
        return numberA;
    }

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

    public double getNumberB() {
        return numberB;
    }

    public void setNumberB(double numberB) {
        this.numberB = numberB;
    }

    public double getResult(){
        double result = 0;
        return result;
    }
}

然后加减乘除分别继承这个父类

package wcfb.factory;

/**
 * 加法运算
 */
public class OperationAdd extends Operation {

    @Override
    public double getResult(){
        double result = 0;
        result = getNumberA() + getNumberB();
        return result;
    }
}
package wcfb.factory;

/**
 * 减法计算
 */
public class OperationSub extends Operation {

    @Override
    public double getResult(){
        double result = 0;
        result = getNumberA() - getNumberB();
        return result;
    }
}
package wcfb.factory;

/**
 * 乘法运算
 */
public class OperationMul extends Operation {

    @Override
    public double getResult(){
        double result = 0;
        result = getNumberA() * getNumberB();
        return result;
    }
}
package wcfb.factory;

/**
 * 除法计算
 */
public class OperationDiv extends Operation {

    @Override
    public double getResult(){
        double result = 0;
        if (getNumberB() == 0){
            System.out.println("除数不能为0");
            return result;
        }
        result = getNumberA() / getNumberB();
        return result;
    }
}

下面是工厂模式 用来生成具体运算方法

package wcfb.factory;

/**
 * 运算符工厂
 */
public class OperationFactory {

    public static Operation createOperation(String operate){
        Operation operation = null;
        switch (operate){
            case "+":
                operation = new OperationAdd();
                break;
            case "-":
                operation = new OperationSub();
                break;
            case "*":
                operation = new OperationMul();
                break;
            case "/":
                operation = new OperationDiv();
                break;
        }
        return operation;
    }
}

主函数

package wcfb.factory;

import java.util.Scanner;

/**
 * 工厂模式
 */
public class Main {

    public static void main(String[] args) {
        Operation operation;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数字A");
        double numberA = scanner.nextDouble();
        System.out.println("请输入运算符");
        String operate = scanner.next();
        System.out.println("请输入数字B");
        double numberB = scanner.nextDouble();
        operation = OperationFactory.createOperation(operate);
        operation.setNumberA(numberA);
        operation.setNumberB(numberB);
        double result = operation.getResult();
        System.out.println(result);
    }
}

至此我们就用了简单的工厂模式写了一个简单的例子

相关文章

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 设计模式一、单例模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 简单单例(推荐...

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • iOS设计模式-工厂模式

    工厂模式分为简单工厂模式,工厂模式、抽象工厂模式三类。 简单工厂模式 1. 定义 简单工厂模式并不是常用的设计模式...

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

  • 设计模式

    设计模式(视频总结) [TOC] 一、简单工厂模式(Simple Factory) 简单工厂模式: 简单工厂模式属...

  • Android设计模式:工厂设计模式

    目录 简单工厂模式工厂方法模式抽象工厂模式 简单工厂模式 简单工厂模式是所有工厂模式的基础,不属于23种设计模式范...

  • 相近设计模式比较

    设计模式干货: 简单工厂模式 vs. 工厂模式 vs. 抽象工厂模式简单工厂和工厂模式区别? 简单工厂没有多个子类...

  • 三、创建型模型

    简单工厂模式 工厂方法模式 抽象工厂模式 单例模式 1.简单工厂模式 简单工厂模式并不属于23种设计模式。 不难看...

  • 简单工厂模式

    Android进阶之设计模式 简单工厂模式 简单工厂模式(又叫作静态工厂方法模式), 其属于创建型设计模式,但并不...

网友评论

      本文标题:设计模式(简单的工厂模式)

      本文链接:https://www.haomeiwen.com/subject/wfdzghtx.html