设计模式之——简单工厂模式

设计模式之——简单工厂模式

简单工厂模式又叫做静态方法工厂,它根据工厂类传入的参数,来动态决定应该创建哪个产品类。

简单工厂模式包含三个角色:

1.工厂角色:是该模式的核心,负责创建所有实例的逻辑。该类可以直接被其他类进行调用,从而创建出目标对象。

2.抽象产品角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例共有的公共接口。

3.具体产品角色:是简单工厂模式的创建目标,所有创建对象都是这个角色中的某个类的具体实例。

该模式的优点:

1.将程序结构化,工厂类负责所有实例的逻辑部分,调用者根据传入参数直接实例化工厂类中的目标实例即可。

2.分工比较明确,维护起来相对容易。

该模式的缺点:

1.违反了高内聚责任分配原则,它将全部的实例化逻辑集中到一个工厂实例类中。

2.如果系统所实例化类不断增多的时候,可能会使工厂类的逻辑变得复杂,维护起来需要一定的精力。

 

列举一个完整代码实例

共7个类:

1.Operation:运算类

2.OperationAdd:加法运算类

3.OperationSub:减法运算类(详细代码略)

4.OperationMul:乘法运算类(详细代码略)

5.OperationDiv:除法运算类(详细代码略)

6.OperationFactory:运算工厂类

7.Test:测试类

具体代码如下

Operation类

package operation;

/**
 * @Author:byq
 * @Date:2020/2/2
 * @Description:运算类
 * @version:1.0
 */
public class Operation {
    private double num1;
    private double num2;

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

    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;
    }
}

OperationFactory类

package operation;

/**
 * @Author:byq
 * @Date:2020/2/2
 * @Description:工厂类,实例化具体类
 * @version:1.0
 */
public class OperationFactory {
    public static Operation createOperation(char operaction){
        Operation oper = null;
        switch (operaction){
            case '+':
                oper = new OperationAdd();//加算法
                break;
            case '-':
                oper = new OperationSub();//减算法
                break;
            case '*':
                oper = new OperationMul();//乘算法
                break;
            case '/':
                oper = new OperationDiv();//除算法
                break;
        }
        return oper;
    }
}

 

OperationAdd类

package operation;

/**
 * @Author:byq
 * @Date:2020/2/2
 * @Description:operation
 * @version:1.0
 */
public class OperationAdd extends Operation  {

    /**
     * 重写父类的方法,实现自己的加运算
     * @return
     */
    @Override
    public double getResult(){
        double result = 0;
        result = getNum1()+getNum2();
        return result;
    }
}

Test类

package operation;

/**
 * @Author:byq
 * @Date:2020/2/2
 * @Description:operation
 * @version:1.0
 */
public class Test {

    public static void main(String[] args){
        //测试一个加运算
        Operation oper = OperationFactory.createOperation('+');
        oper.setNum1(1);
        oper.setNum2(2);
        double result = oper.getResult();
        System.out.println("计算结果为:"+result);
    }
}

运算结果截图

设计模式之——简单工厂模式

 

 

设计模式之——简单工厂模式设计模式之——简单工厂模式 我是一名程序猿 发布了106 篇原创文章 · 获赞 38 · 访问量 7万+ 私信 关注
上一篇:设计模式之(简单工厂)(C#实现)(程杰)


下一篇:九、栈的简单应用(计算字符串表达式的值)