策略模式

策略模式解析

策略模式startegy(对象行为型)

  主要应用于 实现某一个功能有多种算法。我们可以根据不同的环境来切换不同的算法。

  如果是硬编码,多个算法用if...else 等连接,那我如果新增一个算法,那么需要再修改程序中的源代码,以及修改客户端的调用代码。

  这样,代码会很复杂,而且维护困难。

  主要矛盾,解决如何使算法可以独立于使用它的客户,而进行变化。

  策略模式,将对象本身 和 运算规则分开,其功能非常强大,本身核心思想就是面向对象的多形象思想。

适用于:

  1.许多类都相似,只是行为有异。一个系统可以动态的在几种算法中选择一种。

  2.客户不会知道算法的具体实现。

  3.一个类定义多种行为。

环境类:维护对startegy类的引用。

抽象策略类:所有不同算法的共同接口。

具体策略类:实现具体的算法。


创建一个策略接口

public interface Strategy{
      int calculate(int a , int b);
}
具体实现接口的多个算法。比如:加减乘除

public class Add implement Strategy{
     public int calculate(int a , int b){
            return a+b; 
    }
}
环境类

public class Environment{
     private Strategy strategy;
     public Environment(Strategy strategy){
           this.strategy = strategy;
     }
     public void getStrategy(){
           return this.strategy;
     }
     public Strategy setStrategy(Strategy strategy){
         this.strategy = strategy;  
     }
     
     public int calculate(int a , int b){
           return this.strategy.calculate(a , b);
     }
}
客户端调用

main{
    Add add = new Add();
    Environment enviroment = new Environment(add);
    enviroment.calculate(3,4);
}

这个模式,就是将所有的算法封装好。但是客户端需要知道所有的算法,然后来使用。增加了客户端的使用难度。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值