您现在的位置是:首页 > 文章详情

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

日期:2019-12-29点击:295

前言

话说设计模式是我们面试中经常遇到的问题,但是开发中遇到的也不少。之前一直想学设计模式,然后总结写一些文章,但一直忙于其它事情,现在终于要学习设计模式,参考的书籍是《大话设计模式》,这本书写得通俗易懂,推荐大家都去看一下。

场景描述

借用书中示例问题,计算两个数的加、减、乘、除等其它运算,一般我们的思维是自上而下处理问题,也就造成了运算两个数就要经过多次判断。

场景示例

两个数之前的算法运算,如下面代码所示:

package me.xueyao; /** * @author Simon.Xue * @date 2019-12-30 22:54 **/ public class OperationHello { public static void main(String[] args) { System.out.println(getResult("*", 1, 3)); } public static int getResult(String operationStr, int number1, int number2) { int result = 0; switch (operationStr) { case "+": result = number1 + number2; break; case "-": result = number1 - number2; break; case "*": result = number1 * number2; break; case "/": result = number1 / number2; break; } return result; } }

此处的代码要判断四次,但是如果再增加其它的运算,会在原来基础上又增加条件判断。以后,随着业务有扩展会不停添加判断条件。代码的耦合度会越来越高,如果修改某一处运算的问题,就造成线上业务不能访问相关运算的功能,必须要修改好问题,其它的运算功能才能使用。

解决办法

现在可以用到我们所说的简单工厂模式,首先,我们要想,加、减、乘、除运算都属于运算子类,所以我们创建一个运算父类Operation .class

package me.xueyao; /** * @author Simon.Xue * @date 2019-12-30 22:18 **/ public abstract class Operation { private int number1; private int number2; public int getNumber1() { return number1; } public void setNumber1(int number1) { this.number1 = number1; } public int getNumber2() { return number2; } public void setNumber2(int number2) { this.number2 = number2; } public abstract int getResult(); }

加、减、乘、除四则运算,我们分别创建OperationAdd.class,OperationSub.class,OperationMul.class,OperationDiv.class四个子类分别继承运算父类Operation.class, 实现其中计算方法。

package me.xueyao; /** * @author Simon.Xue * @date 2019-12-30 22:22 **/ public class OperationAdd extends Operation { @Override public int getResult() { return getNumber1() + getNumber2(); } }
package me.xueyao; /** * @author Simon.Xue * @date 2019-12-30 22:22 **/ public class OperationSub extends Operation { @Override public int getResult() { return getNumber1() - getNumber2(); } }
package me.xueyao; /** * @author Simon.Xue * @date 2019-12-30 22:25 **/ public class OperationMul extends Operation { @Override public int getResult() { return getNumber1() * getNumber2(); } }
package me.xueyao; /** * @author Simon.Xue * @date 2019-12-30 22:26 **/ public class OperationDiv extends Operation { @Override public int getResult() { return getNumber1() / getNumber2(); } }

当我们要使用运算方法时,只需要创建其对象,再执行计算方法,便可计算两个数的运算,但是现在又有一个问题,就是每种运算方式都要创建对象。都要暴露父类对象,我们可以创建一个工厂类,由工厂类来创建所需要的对象,如下代码如示

package me.xueyao; /** * @author Simon.Xue * @date 2019-12-30 22:30 **/ public class OperationFactory { public static Operation createOperation(String operationStr) { Operation operation = null; switch (operationStr) { case "+": operation = new OperationAdd(); break; case "-": operation = new OperationSub(); break; case "*": operation = new OperationMul(); break; case "/": operation = new OperationDiv(); break; } return operation; } }

总结

简单工厂模式,是设计模式中比较简单的一种模式,但是它每多出一种需求,就要创建一个类,总体来说用起来还不错。文章如有问题,请联系我。

原文链接:https://yq.aliyun.com/articles/741217
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章