设计模式02-----策略模式

场景1

人旅行,set不同的策略实现类,采用对应实现类里的旅行策略办法;eg:飞机策略实现类里的策略方法,乘坐飞机旅行;

场景2

策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

商场的收银系统,商场收银时如何促销,用打折还是返利,其实都是一些算法,打一折和打九折只是形式不同,抽象分析出来,所有的打折算法都是一样的,算法本身只是一种实现促销或打折的策略,重要的是这些算法是随时都可能被替换掉的,这就是变化点


优缺点------改进

优点:

    1、算法可以自由切换。 
    2、避免使用多重条件判断。 
    3、扩展性良好。 
    4、简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

缺点: 

        1、策略类会增多。 2、所有策略类都需要对外暴露。

使用场景:

        1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行            为中选择一种行为。

         2、一个系统需要动态地在几种算法中选择一种。 

        3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

注意事项:

        如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。

策略模式时用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种可能发生的变化。

但是在策略模式中,选择所用具体实现的职责由客户端对象承担,并转给策略模式使用对象,这本身并没有解除客户端需要选择判断的压力,解决这一问题的方法是使用策略模式和简单工厂模式结合,选择具体实现的职责也由策略使用类Context来承担。这就最大化的减轻了客户端的职责。

与其他模式区别联系:

        策略模式和状态模式的应用场景有很大的不同:一个是封装一系列平行且复杂多变的实现方式,一个是实现把对象的内在状态的变化封装起来,用外部行为来表现出来。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值