Java设计模式之策略模式

策略模式定义:定义一组通过方法的接口,然后各个实现类实现该接口,然后再定义一个类将各个实现类封装起来以屏蔽实现类的细节。
策略模式中,有三个模块:

  1. 策略接口模块,用来定义一个公共的策略方法;
  2. 策略实现类模块,公共策略方法的具体实现;
  3. 实现类封装模块,用于封装每个具体策略实现类,以屏蔽实现细节;

下面以做选择题为例:
定义选择策略接口:

public interface ChoiceQuestion {

    void choiceStrategy();
}

分别定义两个选择策略:

public class ChoiceC implements ChoiceQuestion{
    @Override
    public void choiceStrategy() {
        System.out.println("啥也不会,就选C");
    }
}
public class ChoiceLong implements ChoiceQuestion {
    @Override
    public void choiceStrategy() {
        System.out.println("三短一长,就选长");
    }
}

定义学生类:

public class Student {

    private ChoiceQuestion choiceQuestion;

    public Student(ChoiceQuestion choiceQuestion) {
        this.choiceQuestion = choiceQuestion;
    }

    public void choice() {
        choiceQuestion.choiceStrategy();
    }
}

定义业务类:

public class Test {

    public static void main(String[] args) {
        Student student1 = new Student(new ChoiceC());
        Student student2 = new Student(new ChoiceLong());
        student1.choice();
        student2.choice();
    }
}
啥也不会,就选C
三短一长,就选长

从结果可知,student1和student2有不同的选择策略。当我们需要新增策略的时候,只需要创建新的实现类实现策略接口即可,符合开闭原则。当然,我们可以看出每个策略都是一个实现类,策略过多也到知道类的数目过多。

策略模式与工厂模式

策略模式和工厂方法模式是非常相似的,上面例子中的ChoiceC和ChoiceLong可以理解为工厂方法模式中的工厂实现类,ChoiceQuestion接口可以理解为抽象工厂。而策略模式比工厂方法模式多出来的内容便是再创建一个封装类,接收工厂创建好的对象,调用共同的方法就可以执行不同的策略,好处就是屏蔽实现细节,降低类之间的耦合度。
虽然策略模式屏蔽了策略的实现细节,但是系统中有多少种策略并没有屏蔽,业务类需要提前知道系统中的策略种类。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值