设计模式——简单工厂模式(静态工厂方法模式)


简单工厂模式通常是定义一个工厂类,这个类可以根据不同变量返回不同类的产品实例,它是一种对象创建型模式 .(不属于23种Gof设计模式之一)
以实现一个计算器为例:(主要有三个角色)

1. 抽象产品类

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

// ,所有实例所共有的公共接口
abstract class Operation {
    public int numA;
    public int numB;
    public abstract int GetResult();
}

2. 具体产品类

//创建具体产品类:加减乘除
public class Add extends Operation{
    @Override
    public int GetResult() {
        return numA + numB;
    }
}

public class Sub extends Operation{
    @Override
    public int GetResult() {
        return numA - numB;
    }
}

public class Mul extends Operation{
    @Override
    public int GetResult() {
        return numA * numB;
    }
}

public class Div extends Operation{

    @Override
    public int GetResult() {
        if (numB == 0){
            throw new RuntimeException("被除数为0");
        }
        return numA / numB;
    }
}

3. 创建工厂类

// 工厂角色,简单工厂模式的核心,它负责实现创建所有实例的内部逻辑

class OperationFactory {

    public static Operation CreateOperation (char operate) {

        Operation oper = null;

        switch(operate) {

        case '+':

            oper = new Add();

            break;

        case '-':

            oper = new Sub();

            break;

        case '*':

            oper = new Mul();

            break;

        case '/':

            oper = new Div();

            break;

        default:

            break;

        }

        return oper;

    }

}

4. 测试代码

public class SimpleFactoryPattern {
    public static void main(String[] args) {
        int numA = 10;
        int numB = 3;
        int result = 0;
        Operation oper = OperationFactory.CreateOperation('+');
        oper.numA = numA;
        oper.numB = numB;
        result = oper.GetResult();
        System.out.println(numA + " + " + numB + " = " + result);
    }
}

5. 优缺点分析

5.1 优点

  • 使用工厂对象创建具体的产品对象,从而使得对象的使用和创建过程进行的分离
  • 客户端不需要关注对象是谁创建的,只要通过工厂中静态方法就可以直接获取其需要的对象

5.2 缺点

  • 工厂类集中了所有实例的创建逻辑,违背了高内聚责任分配原则
  • 随着系统中具体产品类不断增多,势必要不断修改工厂类,不易维护和扩展, 也违背了开放封闭原则

简单工厂模式,也充分体现了面向对象的三大特征:封装,继承,多态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值