简单工厂模式

解释

简单工厂模式又称静态工厂方法模式。这个模式很简单。它存在的目的很简单:定义一个用于创建对象的接口。
使用很简单,使用也就不太强大,如果需求固定工厂类角色可以确定,是最优选择,如果修改较多不太合适.例如下面计算器代码,加减乘除通过switch选择确定,但是如果新增立方,工厂类就无法满足,需要修改,但是违反了开放-封闭原则(对扩展开放对更改封闭).需要使用到了工厂模式了.

具体代码

抽象产品角色

// 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。
// 在java中由接口或者抽象类来实现。
public abstract class Operation {
    private double nA = 0;
    private double nB = 0;

    public void setnA(double nA) {
        this.nA = nA;
    }

    public void setnB(double nB) {
        this.nB = nB;
    }

    public double getnA() {
        return nA;
    }

    public double getnB() {
        return nB;
    }

    public abstract double GetRsult();
}

工厂类角色

public class OperationFactory {
    // 1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

    public static Operation createOper(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;
    }
}

具体产品角色

// 3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
class OperationAdd extends Operation {

    @Override
    public double GetRsult() {
        return getnA() + getnB();
    }
}

class OperationSub extends Operation {

    @Override
    public double GetRsult() {
        return getnA() - getnB();
    }
}

class OperationMul extends Operation {

    @Override
    public double GetRsult() {
        return getnA() * getnB();
    }
}

class OperationDiv extends Operation {

    @Override
    public double GetRsult() {
        if (getnB() != 0) {
            return getnA() / getnB();
        }
        return 0;
    }
}

测试类

public class Main {
//    简单工厂它存在的目的很简单:定义一个用于创建对象的接口。
//    在简单工厂模式中,一个工厂类(OperationFactory )处于对产品类实例化调用的中心位置上,
// 它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,
// 决定放行那一个方向的车辆向那一个方向流动一样。
//    先来看看它的组成:
    public static void main(String[] args) {
        Operation oper;
        oper = OperationFactory.createOper("-");
        oper.setnA(3);
        oper.setnB(3);
        System.out.print(oper.GetRsult());

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值