简单工厂模式


1. 类图

 

  • Api:功能接口
  • ImplA、ImplB:Api接口的实现类
  • Factory:工厂,选择合适的实现类来创建Api接口对象
  • Client:客户端,通过Factory获取Api接口对象,然后面向Api接口编程

2. 示例

通过工厂类的静态方法获取对象

Client.png

2.1 功能接口

public abstract class Operation {
    Integer numberA;
    Integer numberB;
    public void setNumberA(Integer numberA){this.numberA = numberA;}
    public void setNumberB(Integer numberB){this.numberB = numberB;}
    abstract Integer getResult();
}

2.2 接口实现类

public class OperationAdd extends Operation {
    @Override
    Integer getResult() {
        return numberA + numberB;
    }
}

public class OperationSub extends Operation {
    @Override
    Integer getResult() {
        return numberA - numberB;
    }
}

2.3 工厂

public class OperationFactory {
    public static Operation createOperation(int condition){
        if (condition == 1) { return new OperationAdd(); }
        if (condition == 2) { return new OperationSub(); }
        throw new RuntimeException("不支持的算法");
    }
}

2.4 客户端

public class Client {
    public static void main(String[] args) {
        Operation operation = OperationFactory.createOperation(1);
        operation.setNumberA(100);
        operation.setNumberB(200);
        System.out.println(operation.getResult());
    }
}

3. 优点

工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖

4. 缺点

违背了开闭原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值