ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-02-02 16:06:55  阅读:315  来源: 互联网

标签:oper double 模式 工厂 实例 Operation 设计模式 public


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

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

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

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万+ 私信 关注

标签:oper,double,模式,工厂,实例,Operation,设计模式,public
来源: https://blog.csdn.net/baidu_35901646/article/details/104145572

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有