设计模式之策略模式
2019-02-28 本文已影响1人
GitCode8
策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。大白话就是,当一个任务有个解决方法,每一个解决方法都是是一个策略,可以进行解决该任务。
在这里,我们举个栗子。有一项工作,需要工人来完成。
1、我们定义一个接口,抽象工人都会做完成工作。
public interface Strategy {
void doJob();
}
接着,我们再定义两个具体的工人,他们完成工作有自己的模式。也就对应策略模式不同解决方法的具体内容。并实现策略接口。
public class WorkerDayStrategy implements Strategy {
@Override
public void doJob() {
System.out.println("我是工人Day,我只在白天工作");
}
}
public class WorkerNightStrategy implements Strategy {
@Override
public void doJob() {
System.out.println("我是工人Night,我只在晚上工作");
}
}
2、到此,我们需要对外提供工人,根据客户需求,选择不同工人。也就是策略模式,根据不同的需求,选择不同的算法(解决方法)
public class Worker {
private Strategy strategy;
public Worker(Strategy strategy) {
this.strategy = strategy;
}
public void doWork() {
strategy.doJob();
}
}
3、 目前为止,是时候对外营业了。有客户来选择工人了。
public class Main {
public static void main(String[] args) {
Worker worker=new Worker(new WorkerDayStrategy());
worker.doWork();
}
}
运行结果
我是工人Day,我只在白天工作
总结
- 通过总结多个算法,封装起来,对外暴露算法,根据需要选择不同的算法。相对于使用if或switch分支,具有更高的维护性和扩展性。满足开闭原则。