记录一次工厂+策略设计模式的应用

记录一次工厂+策略设计模式的应用

工厂:创建对象。

策略:某个行为。

举个简单的例子:我们会支付的时候可以用花呗、余额宝、余额、银行卡进行支付。

  • 最原始的方式
public class PayService{
    public void pay(String type) {
        if ("花呗".equals(type)) {
			// 花呗支付逻辑
        } else if ("余额宝".equals(type)) {
            // 余额宝支付逻辑
        } else if ("余额".equals(type)) {
            // 余额支付逻辑
        } else if ("银行卡".equals(type)) {
            // 银行卡支付逻辑
        }
    }   
}
  • 枚举的方式
public class PayService{
    public void pay(PayType type) {
        switch(type) {
            case "花呗": {
                // 花呗支付逻辑
                break;
            }
            case "余额宝": {
                // 余额宝支付逻辑
                break;
            }
            case "余额": {
                // 余额支付逻辑
                break;
            }
            case "银行卡": {
                // 银行卡支付逻辑
                break;
            }
            default: throw new RuntimeException();
        }
    }   
}
  • 工厂和策略

定义一个工厂,项目启动的时候,同一个包下中的组件就会注册到context中。

@Component()
public class PayFactory {
    
    @Autowried
    private Map<String,PayStrategy> context;
    
    public PayStrategy getPayComponent(String beanId) {
        PayStrategy strategy = context.get(beanId);
        if (null == strategy) {
            throw new Exception();
        }
        return strategy;
    }
    
}

定义一个支付策略接口。

public interface PayStrategy {
    void pay();
}

定义花呗支付的实现逻辑。

@Component()
public class HuaBeiPayStrategy implements PayStrategy {
    public void pay() {
        // 花呗支付逻辑
    }
}

定义余额宝支付的实现逻辑。

@Component()
public class YuEBaoPayStrategy implements PayStrategy {
    public void pay() {
        // 余额宝支付逻辑
    }
}

定义余额支付的实现逻辑。

@Component()
public class YuEPayStrategy implements PayStrategy {
    public void pay() {
        // 余额支付逻辑
    }
}

定义银行卡支付的实现逻辑。

@Component()
public class BankPayStrategy implements PayStrategy {
    public void pay() {
        // 银行卡支付逻辑
    }
}
@Service
public class PayService {
    @Autowried
    private PayFactory factory;
    
    public void pay(String type) {
        factory.getPayComponent(type).pay();
    } 
    
}

当我们新增支付方式时,我们只需要添加一个PayStrategy的具体实现即可。

当几种支付方式存在相同的逻辑,可抽象成一个类,具体的策略继承该抽象类,代码也会变得更加简洁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值