实战java设计模式(二十三)策略模式

1 介绍

策略模式适用于一个问题有多种解决方案的情况。

2 例子

假如在一个幼儿园大班,老师问怎么才能通过数学计算得到6这个数字,每个小朋友的方案都不一样,使用策略模式就非常方便了。

2.1 策略父类(老师的问题)

interface Strategy{
    void get6();
}

2.2 不同的策略

//加法策略
class Add implements Strategy{
    @Override
    public void get6() {
        System.out.println("3+3可以得到6");
    }
}
//减法策略
class Sub implements Strategy{

    @Override
    public void get6() {
        System.out.println("7-1可以得到6");
    }
}
//乘法策略
class Mul implements Strategy{

    @Override
    public void get6() {
        System.out.println("2×3可以得到6");
    }
}

2.3 策略拥有者

class Student{
    private Strategy strategy;
    Student(Strategy strategy){
        this.strategy=strategy;
    }
    //展示这个同学得到6的策略
    void showStrategy(){
        this.strategy.get6();
    }
}

2.4 测试主类

public class Main {
    public static void main(String[] args) {
        //创建同学
        Student xiaoming=new Student(new Add());
        Student xiaohong=new Student(new Sub());
        Student xiaogang=new Student(new Mul());

        //说出各自的策略
        xiaoming.showStrategy();
        xiaohong.showStrategy();
        xiaogang.showStrategy();
    }
}

3 总结

3.1 核心角色

  • 策略父类:声明需要解决的问题。
  • 策略子类:解决的这个问题的具体实现。
  • 策略拥有者:谁拥有(执行)这个策略。

3.2 核心代码结构

其实本质就是一个抽象类的不同实现。注意和状态模式的区别,状态模式强调的是类的功能方法随着对象的变换而变化,但是策略模式强调为解决一个问题的不同方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值