设计模式 -- 简单工厂模式

客户要求:实现一个计算器

糙汉子这样实现:

import java.util.Scanner;

/**
 * @Author:
 * @Description:
 * @Date:Create in 2018/4/16 19:45
 * @Modify By:
 */
public class XiewtTest {
    public static void main(String[] args) {

        Scanner scaner=new Scanner(System.in); //参数对象是系统进来的流
        System.out.println("请输入数据1:");
        String strNum1=scaner.next(); //next()方法用来接收控制台输入的字符串

        System.out.println("请输入数据2:");
        String strNum2=scaner.next(); //next()方法用来接收控制台输入的字符串

        System.out.println("请输入操作符:");
        String strOperate=scaner.next(); //next()方法用来接收控制台输入的字符串

        String strResult = "";

        switch(strOperate) {
            case "+" :
                strResult =  String.valueOf(Double.parseDouble(strNum1) + Double.parseDouble(strNum2));
                break;
            case "-" :
                strResult =  String.valueOf(Double.parseDouble(strNum1) - Double.parseDouble(strNum2));
                break;
            case "*" :
                strResult =  String.valueOf(Double.parseDouble(strNum1) - Double.parseDouble(strNum2));
                break;
            case "/" :
                if (Double.parseDouble(strNum2) != 0) {
                    strResult =  String.valueOf(Double.parseDouble(strNum1) / Double.parseDouble(strNum2));
                } else {
                    strResult = "除数不能为0";
                }
                break;
        }
        System.out.println(strResult);

    }
}

如果客户一言不合要加需求:我需要能开根号的计算器。

那我们就需要对该程序进行较大的改动,如果客户不断有需求,我们就要疯掉了,作为一个面向对象的程序员,我们需要考虑通过封装、继承、多态来降低程序的耦合度。于是面向对象的计算器出现了:

class Operation {
    private double num1 = 0;
    private double num2 = 0;

    public double getNum1() {
        return num1;
    }

    public void setNum1(double num1) {
        this.num1 = num1;
    }

    public double getNum2() {
        return num2;
    }

    public void setNum2(double num2) {
        this.num2 = num2;
    }

    public double getResult() {
        double result = 0;
        return result;
    }
}
public class OperationAdd extends Operation {
    public double getResult() {
        double result = 0;
        result = num1 + num2;
        return result;
    }
}
public class OperationSub extends Operation {
    public double getResult() {
        double result = 0;
        result = num1 - num2;
        return result;
    }
}
public class OperationFactory {
    public static Operation createOperate(String operate) {
        Operation oper = null;
        switch (operate) {
            case "+":
                oper = new OperationAdd();
                break;
            case "-":
                oper = new OperationSub();
                break;
            case "*":
                oper = new OperationMul();
                break;
            
            case "/":
                oper = new OperationDiv();
                break;
        }
        return oper;
    }
}
如果还需要实现其他计算方式,只需要新增计算方式的类,在工厂类中添加对参数判断的方法就搞定了,比第一种方式简洁很多,而且还不影响之前的业务。这种方式就是简单工厂模式


简单工厂模式:又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式包含如下角色:

  • Factory:工厂角色
    工厂角色负责实现创建所有实例的内部逻辑
  • Operate:抽象运算角色
    抽象运算角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口
  • OperationAd:具体运算角色
    具体运算角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Pepper_rose/article/details/79965131
上一篇Intellij IDEA 下载插件网络连接超时
下一篇设计模式 -- 装饰模式
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭