策略模式

 一、策略模式的概念

策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法

针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换

比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法

 

环境角色[Context]:持有一个Strategy的引用

抽象策略角色[Strategy]:这是一个抽象角色,通常由一个接口或抽象类实现,此角色给出所有的具体策略类所需的接口

具体策略角色[ConcreteStrategy]:包装了相关的算法或行为

 

二、策略模式的实现

//Context上下文
public class Context{

    private Strategy strategy;
    
    public Context(Strategy strategy){
        
        this.strategy = strategy;
    }

    public void ContextInterface(){
        
        strategy.AlgorithmInterface();
    }
}
//抽象策略接口
public Interface Strategy{

    public void AlgorithmInterface();
}
//具体策略A
public class ConcreteStrategyA implements Strategy{

    public void AlgorithmInterface(){
        
        //TODO
    }    
}
//具体策略B
public class ConcreteStrategyB implements Strategy{

    public void AlgorithmInterface(){
        
        //TODO
    }    
}
public class Test{

    public static void main(String args[]){
        
        Context ctx = new Context(new ConcreteStrategyA());
        ctx.ContextInterface();
        
    }
}

三、策略模式的应用

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

 

四、策略の其他问题

pros and cons

策略类之间可以自由切换,可以避免使用多重条件(if-else)语句,易于扩展

客户端必须知道所有的策略类,并自行决定使用哪一个策略类

策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很庞大

五、Reference

       维基百科

       策略模式

       23种设计模式之策略模式

       JAVA与模式之策略模式

 

 

六、Resource


       大话设计模式

       Head First 设计模式

       Java设计模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值