欢迎光临Software MyZone,有问题可留言或到站点论坛发帖,争取第一时间帮忙解决 || 站点论坛:火龙论坛 || 淘宝小店:应小心的易淘屋 【欢迎大家提建设性意见】

Java设计模式(一):简单工厂模式

欢迎热爱编程的朋友们参与到cocos2d-x编程中,为了给大家提供良好的交流环境,网站以开启QQ群
Software MyZone:66202765(群号,欢迎加入,若满,请加1群)
Software MyZone 1群(2dx):286504621
Software MyZone 2群(山东):204954191
Software MyZone【Java群】:162865493
【加群请写:Software MyZone或者是firedragonpzy】
淘宝店:【58买单】初次开店,大家多多支持……
群论坛:【火龙论坛】正试运营阶段,欢迎大家多提些建设性意见……
群问答:【火龙问答】正试运营阶段,欢迎大家多提些建设性意见……
摘自:http://alexpdh.com/2017/03/27/simple-factory-pattern/

我的digitalocean推广链接:https://www.digitalocean.com/?refcode=65dfdb158f1a,Everyone you refer gets $10 in credit,从此链接注册,你将获得10美元。

简单工厂模式(simple factory pattern)

简单工厂模式(simple factory pattern):是一种类的创建方式,就是说我们考虑使用一个单独的类来处理类的实例化。例如,对于一个计算器,只需要考虑输入数字和运算符工厂就可以实例化出适合的对象计算出结果。


简单工厂模式UML图

simplefactorpattern


示例代码

运算类 Operation:用于计算结果。申明两个变量 numberA、numberB 用于记录需要计算的两个数,定义一个getResult()方法,用于获取计算结果。

package com.example.simpleFactoryPattern;
/**
 * 运算类
 *
 * @author pengdh
 * @date: 2017-03-15 22:44
 */
public class Operation {
    protected double numberA;
    protected double numberB;
    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;
    }
}

加法运算类 OperationAdd:继承运算类,用于加法运算

package com.example.simpleFactoryPattern;
/**
 * 加法运算类
 *
 * @author pengdh
 * @date: 2017-03-15 23:19
 */
public class OperationAdd extends Operation {
    @Override
    public double getResult() {
        double result = 0;
        result = numberA + numberB;
        return result;
    }
}

减法运算类 OperationSub:继承运算类,用于减法运算

package com.example.simpleFactoryPattern;
/**
 * 减法运算类
 *
 * @author pengdh
 * @date: 2017-03-15 23:24
 */
public class OperationSub extends Operation {
    @Override
    public double getResult() {
        double result = 0;
        result = numberA - numberB;
        return result;
    }
}

乘法运算类 OperationMul:继承运算类,用于乘法运算

package com.example.simpleFactoryPattern;
/**
 * 乘法运算类
 *
 * @author pengdh
 * @date: 2017-03-15 23:27
 */
public class OperationMul extends Operation {
    @Override
    public double getResult() {
        double result = 0;
        result = numberA * numberB;
        return result;
    }
}

除法运算类 OperationDiv:继承运算类,用于除法运算

package com.example.simpleFactoryPattern;
/**
 * 除法运算类
 *
 * @author pengdh
 * @date: 2017-03-15 23:30
 */
public class OperationDiv extends Operation {
    @Override
    public double getResult() {
        double result = 0;
        result = numberA / numberB;
        return result;
    }
}

工厂类 OperationFactory:根据输入的运算符,通过多态来创建适合的计算对象实现计算结果。

package com.example.simpleFactoryPattern;
/**
 * 运算工厂类
 *
 * @author pengdh
 * @date: 2017-03-15 23:35
 */
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;
    }
}

客户端测试类 OperationTest

package com.example.simpleFactoryPattern;
/**
 * 运算测试类
 *
 * @author pengdh
 * @date: 2017-03-16 0:16
 */
public class OperationTest {
    public static void main(String[] args) {
        Operation oper = new Operation();
        oper = OperationFactory.createOperate("+");
        oper.numberA = 3;
        oper.numberB = 1;
        double result = oper.getResult();
        System.out.println("-----------pengdh----------- result = " + result + "," + "当前类 = OperationTest.main()");
    }
}

以上通过 OperationFactory 工厂类来管理计算对象。这样如果有新的计算方法就不用再去原有的计算对象。例如,新加一个乘方运算,只需要新增一个继承运算类的乘方运算类,然后在工厂类新增一个乘方分支就可以了。

参考文献

欢迎关注官方公众号!

欢迎关注集娱乐休闲与优惠券购物于一体公众号!