标签:code 比较 nts sig 也有 运行 mic stp div
在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。简单理解就是一组算法,可以互换,再简单点策略就是封装算法。
假设某人在开车时频繁加速,因为超速他被一个警察拦下来了。有可能这个警察会比较友好,没开任何罚单就让他把车开走了。也有可能遇到了一个不太友好的警察,然后这个警察给他出具了一张罚单。但是并不知道会遇到什么类型的警察,直到他因为超速而被警察拦下停车,实际上这就是一种程序当中“运行时”的概念,只有在运行的时候才知道,到底会遇到什么类型的警察,实际上这就是“策略模式”。
策略接口:
//先来定义一个策略的接口:Strategy public interface Strategy { public void processSpeeding(int speed); }
两种不同类型的Strategy:
public class NicePolice implements Strategy { @Override public void processSpeeding(int speed) { System.out.println("This is your first time, be sure don‘t do it again!"); } } public class HardPolice implements Strategy { @Override public void processSpeeding(int speed) { System.out.println("Your speed is " + speed+ ", and should get a ticket!"); } }
定义需要依赖警察来处理超速问题的场景
public class Situation { private Strategy strategy; public Situation(Strategy strategy){ this.strategy = strategy; } public void handleByPolice(int speed){ this.strategy.processSpeeding(speed); } }
测试
public class Main { public static void main(String[] args) { HardPolice hardpolice = new HardPolice(); NicePolice nicepolice = new NicePolice(); // In situation 1, a hard officer is met // In situation 2, a nice officer is met Situation s1 = new Situation(hardpolice); Situation s2 = new Situation(nidepolice); // the result based on the kind of police officer. s1.handleByPolice(10); s2.handleByPolice(10); } }
优点:
算法可以自由切换:改一下策略很方便
扩展性良好:增加一个策略,就多增加一个类就好了。
缺点:
策略类的数量增多:每一个策略都是一个类,复用的可能性很小、类数量增多
所有的策略类都需要对外暴露:上层模块必须知道有哪些策略,然后才能决定使用哪一个策略
在创建线程池(ThreadPoolExecutor)时,需要传入拒绝策略,当创建新线程使当前运行的线程数超过maximumPoolSize时,将会使用传入的拒绝策略进行处理。
这里使用的就是策略模式。
标签:code 比较 nts sig 也有 运行 mic stp div
原文地址:https://www.cnblogs.com/rouqinglangzi/p/11760749.html