快速学习设计模式-策略模式

我对设计模式的理解:

多数开发人员应该知道设计模式这个东西;部分人知道23种设计模式;少数人能够熟练使用设计模式,极少数人精通设计模式。

其实23种设模式,其实只是入门,这就相当于你学英语,学会了26个英文字母,才能开始学习单词。同样23种设计模式,只是字母表,想要到精通的层次,要能够灵活的使用设计模式,灵活的组合设计模式。

设计模式是我短期计划中的一部分,我的文章致力于最快最简单的掌握每一个设计模式。

我的设计模式相关的文章,都会在开篇使用一句话,来描述一个设计模式!

 

该模式设计关键点

 使用接口声明算法,由实现这些接口,实现了这些接口的不同类称为不同的策略。 

 

UML图

 

策略模式其实非常的简单,一个接口声明了某个算法,说我这个算法是用来干什么的。 而由具体的类,来实现这个接口。实现接口就要实现其全部的方法。

 

最大的好处,是解耦,更好的遵守开闭原则,写出更容易维护的代码。大家聊策略模式的时候都喜欢举不同等级的会员结账的例子,或者说商场做不同的活动,结账的例子。

比方说,商场今天对生活用品打了八折,对省生鲜打了五折,对快要过期的零食打了三折,今天是这样的活动,明天还不知道有什么活动。在这种情况下,程序员为了能够写出来易于维护易于扩展的代码。而想出来的一种手段。通过定义不同的计算方法,来完成这个需求。

 

简单的代码案例

 注意我的案例中借用了spring 的bean容器管理功能 

1. 定义一个接口


interface Strategy {
    //计算方法
    public Integer caculate(Integer money);    
}

 

 2. 实现类A

//具体策略类A
@component("ConcreteStrategyA")
class ConcreteStrategyA implements Strategy {
    public Integer caculate(Integer money) {
        // 根据不同的活动来进行不同的计算
        return money * 0.8;
    }
}

 3 实现类B

//具体策略类B
@component("ConcreteStrategyB")
class ConcreteStrategyB implements Strategy {
    public Integer caculate(Integer money) {
        // 根据不同的活动来进行不同的计算
        return money * 0.5;
    }
}

4. 来灵活使用策略

@Service
public class CaculateService{
    
    @Autowired
    private Map<String, Strategy> caculateStrategy;

    public Integer CaculateManey(Integer targetManey, String strategy){
    
    return caculateStrategy.get(strategy).caculate(targetManey);
    
  }

}

4. 如果想要增加不同的活动,则只需要定义不同的类来实现我们的接口。

 另外在调用的时候传入不同的活动类型,就可以来进行计算。

 入过不这样写的话,我们还要改CaculateService 这个类,通过写 if  else 来实现添加不同的策略。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值