设计模式之策略模式

目录

策略模式

实现策略模式主要包括三部分

​具体步骤为

创建接口

创建实现类

创建环境类

输出

总结


策略模式

一个类的行为或其算法可以在运行时更改,策略模式把对象本身和运算规则区分开来,在多种算法相似的情况下,能够解决if...else所带来的复杂和难以维护的问题。

实现策略模式主要包括三部分

  • 环境类Context:用来操作策略的上下文,即Conext持有策略。
  • 抽象策略类(Strategy):策略的抽象接口,定义需要实现的方法。
  • 具体的策略类(ConcreteStrategy):具体策略的实现。

具体步骤为

创建接口

public interface Strategy {

    void operation(int a ,int b);
}

创建实现类

public class OpeationAdd implements Strategy {
    @Override
    public void operation(int a, int b) {
        System.out.println("加法..."+(a+b));
    }
}



public class OperationMul implements Strategy {
    @Override
    public void operation(int a, int b) {
        System.out.println("乘法..."+(a*b));
    }
}




public class OperationSub implements Strategy {
    @Override
    public void operation(int a, int b) {
        System.out.println("减法..."+(a-b));

    }
}

创建环境类

public class Context {
    
    // 持有策略
    private Strategy strategy;

    public Strategy getStrategy() {
        return strategy;
    }

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    public void execute(int a, int b){
        strategy.operation(a, b);
    }

    public static void main(String[] args) {
        Context context = new Context(new OperationAdd());
        context.execute(12, 34);
        context = new Context(new OperationSub());
        context.execute(12, 34);
        context = new Context(new OperationMul());
        context.execute(12, 34);
    }
}

输出

总结

策略模式的优点:

  • 在运算的时候通常会选择if-else语句,这种情况下代码的耦合性太高,增加一种类型时就需要修改一次代码,造成代码的过度臃肿,有了策略模式我们可以避免这种现象。
  • 策略模式遵循开闭原则,实现了代码的解耦,当增加新的处理方式时只需要继承接口即可。

缺点:

  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。
  • 策略模式造成很多的策略类,每个具体策略类都会产生一个新类。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值