1.什么是策略模式
策略模式(Strategy Pattern)也叫做政策模式(Policy Pattern)这种类型的设计模式属于行为型模式
定义一组 算法,将每个算法都封装起来,并且使它们之间可以互换。
自己的理解 做事情 不同情况的处理
引入<<设计模式之禅>>中的例子 刘备江东娶妻 赵云使用诸葛亮三条锦囊妙计
例子1
public class StrategyPattern { static class ZhaoYun { //赵云出场了,他根据诸葛亮给他的交代,依次拆开妙计 public static void main(String[] args) { Context context; System.out.println("---拆第一个---"); context = new Context(new BackDoor()); context.operate(); System.out.println("---拆第二个了---"); context = new Context(new GivenGreenLight()); context.operate(); System.out.println("---拆第三个---"); context = new Context(new BlockEnemy()); context.operate(); } } /** * 妙计 策略接口 */ interface IStrategy { public void operate(); } /** * 找乔国老走后门 具体策略类 策略接口子类 */ static class BackDoor implements IStrategy { @Override public void operate() { System.out.println("找乔国老帮忙,让吴国太给孙权施加压力"); } } /** * 求吴国太开绿灯 具体策略类 策略接口子类 */ static class GivenGreenLight implements IStrategy { @Override public void operate() { System.out.println("求吴国太开绿灯,放行!"); } } /** * 孙夫人断后 具体策略类 策略接口子类 */ static class BlockEnemy implements IStrategy { @Override public void operate() { System.out.println("孙夫人断后,挡住追兵"); } } /** * 锦囊 环境类 策略执行入口 */ static class Context { private IStrategy straegy; public Context(IStrategy strategy) { this.straegy = strategy; } public void operate() { this.straegy.operate(); } } }
结果如下
做事情会有很多情况 不同情况会有不同的处理
比如说想要去旅行 那么旅行要选择那种交通方式呢 飞机 高铁 火车 自家 都行
例子2
public class StrategyPattern2 { public static void main(String[] args) { //模拟客户端调用 选择不同策略 使用不同的旅行方式 GoTravel airplane = new GoTravel(new Airplane()); System.out.println("旅行方式" + airplane.tool()); GoTravel car = new GoTravel(new Car()); System.out.println("旅行方式" + car.tool()); GoTravel highTrain = new GoTravel(new HignTrain()); System.out.println("旅行方式" + highTrain.tool()); } /** * 策略接口 想去旅行 */ interface Travel { public String tool(); } /*** * 环境类 具体执行策略入口 */ static class GoTravel { private Travel travel; public GoTravel(Travel travel) { this.travel = travel; } public String tool() { return travel.tool(); } } /*** * 具体策略类 策略接口子类 */ static class Car implements Travel { @Override public String tool() { return "开车"; } } /*** * 具体策略类 策略接口子类 */ static class HignTrain implements Travel { @Override public String tool() { return "坐高铁"; } } /*** * 具体策略类 策略接口子类 */ static class Airplane implements Travel { @Override public String tool() { return "坐飞机"; } } }
2.为什么要用策略模式
3.怎么使用策略模式
原文:https://www.cnblogs.com/wf-zhang/p/14888752.html