策略模式是行为型设计模式。
其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
策略模式使得算法可以在不影响到客户端的情况下发生变化。
下面是基本结构:
三类角色:
strategy
的引用。案例实现:
定义一族算法,可以实现对两个数的操作,例如+、-、*、/
等。
实现代码整体框架图:
具体代码实现:
context
类:
/** * context 是一个使用了某种策略的类。 实现了 strategy 接口的实体策略类 */ public class context { private strategy strategy; public context(strategy strategy) { this.strategy = strategy; } public int executestrategy(int num1, int num2){ return strategy.dooperation(num1, num2); } } strategy接口: /**策略的公共接口*/ public interface strategy { int dooperation(int num1, int num2); }
三种对应的算法实现:
/** 算法1: 实现加法 */ public class operationadd implements strategy { @override public int dooperation(int num1, int num2) { return num1 + num2; } } /** 算法2:实现减法 */ public class operationsubstract implements strategy{ @override public int dooperation(int num1, int num2) { return num1 - num2; } } /** 算法3: 实现乘法 */ public class operationmultiply implements strategy{ @override public int dooperation(int num1, int num2) { return num1 * num2; } }
测试类:
public class mytest { public static void main(string[] args) { context context = new context(new operationadd()); system.out.println("10 + 5 = " + context.executestrategy(10, 5)); context = new context(new operationsubstract()); system.out.println("10 - 5 = " + context.executestrategy(10, 5)); context = new context(new operationmultiply()); system.out.println("10 * 5 = " + context.executestrategy(10, 5)); } }
程序输出:
10 + 5 = 15 10 - 5 = 5 10 * 5 = 50
免费java高级资料需要自己领取,涵盖了java、redis、mongodb、mysql、zookeeper、spring cloud、dubbo高并发分布式等教程,一共30g。
传送门:https://mp.weixin.qq.com/s/jzddfh-7ynudmkjt0irl8q
如对本文有疑问, 点击进行留言回复!!
SpringBoot引用阿里easyexcel,Excel导出返回浏览器下载
HashMap、Hashtable、ConcurrentHashMap三者间的异同
解决RecycleView 中Item包含Edittext时,滑动view复用导致数据错乱的问题
多线程、同步工作原理、死锁案例、Lock接口、线程的生命周期的讲解及实现
网友评论