策略模式

策略模式(Strategy Pattern):   接口,只有一个方法,子类实现    ---->     https://www.jianshu.com/p/7b7de81cdfbe          

策略模式简记:一个策略接口,若干具体的策略实现类,封装一个用于更新和执行策略的上下文Context,其构造函数和设置策略函数功能是一致的。

策略模式概要
策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。
策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。
用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。

这个模式涉及到三个角色:
● 环境(Context)角色:持有一个Strategy的引用。
● 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
● 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。


策略模式的优点:
 算法可以自由切换;
 避免使用多重条件判断;
 扩展性良好。

策略模式的缺点:
 策略类会增多
 所有策略类都需要对外暴露

策略模式的适用场景:
 当一个系统中有许多类,它们之间的区别仅在于它们的行为,希望动态地让一个对象在许多行为中选择一种行为时;
 当一个系统需要动态地在几种算法中选择一种时;
 当一个对象有很多的行为,不想使用多重的条件选择语句来选择使用哪个行为时。

        案例代码:        
                策略模式上下文
                public class Context {
                    //持有一个具体策略的对象
                    private Strategy strategy;
                    /**
                     * 构造函数,传入一个具体策略对象
                     * @param strategy    具体策略对象
                     */
                    public Context(Strategy strategy){
                        this.strategy = strategy;
                    }
                    /**
                     * 策略方法
                     */
                    public void contextInterface(){
                        strategy.algorithmInterface();
                    }
                }

                
                抽象策略类
                public interface Strategy {
                    /**
                     * 策略方法
                     */
                    public void algorithmInterface();
                }

                
                具体策略类
                public class ConcreteStrategyA implements Strategy {

                    @Override
                    public void  algorithmInterface() {
                        //相关的业务
                    }

                }

                public class ConcreteStrategyB implements Strategy {

                    @Override
                    public void  algorithmInterface() {
                        //相关的业务
                    }

                }

                public class ConcreteStrategyC implements Strategy {

                    @Override
                    public void  algorithmInterface() {
                        //相关的业务
                    }

                }

                
                客户端
                //选择使用的策略
                Strategy s = new ConcreteStrategyA();
                Context context = new Context(s);
                context.ontextInterface();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值