设计模式二之策略模式

策略模式定义:

它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

策略模式(Strategy)组成:

1. 定义一个所有支持的算法的公共接口策略接口或者抽象类,在这个接口或抽象类中定义一个算法方法由具体的策略实体类来重写,并实现具体的算法功能

package 大话设计模式.策略模式;
//策略接口
public interface Strategy {
    //定义算法方法
    public abstract void AlgorithmInterface();
}

2.定义具体的策略类,封装了具体的算法或者行为,实现Strategy接口

//定义具体策略A,实现策略接口,重写具体的算法功能
public class ConcreteStrategyA implements Strategy{

    @Override
    public void AlgorithmInterface() {
        // TODO Auto-generated method stub
        System.out.println("算法A的实现");
    }

}
package 大话设计模式.策略模式;
//定义具体策略B,实现策略接口,重写具体的算法功能
public class ConcreteStrategyB implements Strategy{

    @Override
    public void AlgorithmInterface() {
        // TODO Auto-generated method stub
        System.out.println("算法B的实现");
    }

}
//定义具体策略C,实现策略接口,重写具体的算法功能
package 大话设计模式.策略模式;

public class ConcreteStrategyC implements Strategy{

    @Override
    public void AlgorithmInterface() {
        // TODO Auto-generated method stub
        System.out.println("算法C的实现");
    }

}

3.定义Context上下文类,用一个ContextStrategy来配置,维护一个对Strategy对象的引用

package 大话设计模式.策略模式;

public class Context {
   private Strategy strategy;
   //初始化上下文对象时,传入具体的策略对象
   public Context(Strategy strategy){
       this.strategy=strategy;
   }
   //根据具体的策略对象,调用其算法方法
   public void contextInterface(){
      this.strategy.AlgorithmInterface();
   }
}

策略模式的优越性在哪里?

策略模式的核心思想在于针对同一个问题,出现不同种算法情况下的解决办法(比如实际问题中的商场打折促销,商家有多种打折手段,并且手段更换频繁),对于这种情况,策略模式封装了它变的部分,即就是把变的算法部分单独拿出来做了一个封装,这样坐的好处有:

1.扩展性:如果有新的算法方案,只需要创建一个新的策略类,再实现策略接口,实现具体的算法功能,在实例化Context类的时候,传入新的策略类的对象即可。足见其扩展性良好

2.可维护性,如果有一个算法设计不合理,比如打折手段不合适,那么我只需要修改该算法具体的策略类即可,其他地方一律不用改,维护成本低

3.灵活性,由于做了封装,有哪里需要用到该算法家族,直接创建上下文类Context对象,传入具体的策略类的实现,调用方法即可,代码量少,可复用价值高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值