博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 之23种设计模式解析
阅读量:4047 次
发布时间:2019-05-25

本文共 1570 字,大约阅读时间需要 5 分钟。

 C、关系模式(11种)

先来张图,看看这11中模式的关系:

第一类:通过父类与子类的关系进行实现。

第二类:两个类之间。

第三类:类的状态。

第四类:通过中间类

父类与子类关系

13、策略模式(strategy)

策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数,关系图如下:

图中ICalculator提供同意的方法,

AbstractCalculator是辅助类,提供辅助方法,接下来,依次实现下每个类:

首先统一接口:

[java] 

  1. public interface ICalculator {  
  2.     public int calculate(String exp);  
  3. }  

辅助类:

[java] 

  1. public abstract class AbstractCalculator {  
  2.       
  3.     public int[] split(String exp,String opt){  
  4.         String array[] = exp.split(opt);  
  5.         int arrayInt[] = new int[2];  
  6.         arrayInt[0] = Integer.parseInt(array[0]);  
  7.         arrayInt[1] = Integer.parseInt(array[1]);  
  8.         return arrayInt;  
  9.     }  
  10. }  

三个实现类:

[java] 

  1. public class Plus extends AbstractCalculator implements ICalculator {  
  2.   
  3.     @Override  
  4.     public int calculate(String exp) {  
  5.         int arrayInt[] = split(exp,"\\+");  
  6.         return arrayInt[0]+arrayInt[1];  
  7.     }  
  8. }  

[java] 

  1. public class Minus extends AbstractCalculator implements ICalculator {  
  2.   
  3.     @Override  
  4.     public int calculate(String exp) {  
  5.         int arrayInt[] = split(exp,"-");  
  6.         return arrayInt[0]-arrayInt[1];  
  7.     }  
  8.   
  9. }  

[java] 

  1. public class Multiply extends AbstractCalculator implements ICalculator {  
  2.   
  3.     @Override  
  4.     public int calculate(String exp) {  
  5.         int arrayInt[] = split(exp,"\\*");  
  6.         return arrayInt[0]*arrayInt[1];  
  7.     }  
  8. }  

简单的测试类:

[java] 

  1. public class StrategyTest {  
  2.   
  3.     public static void main(String[] args) {  
  4.         String exp = "2+8";  
  5.         ICalculator cal = new Plus();  
  6.         int result = cal.calculate(exp);  
  7.         System.out.println(result);  
  8.     }  
  9. }  

输出:10

策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。

你可能感兴趣的文章
hdu 1941 Justice League 无向完全图
查看>>
hdu 1285 确定比赛名次 拓扑排序模板题 优先队列
查看>>
poj 1797 Heavy Transportation 最小生成树 最大生成树
查看>>
hdu 1102 Constructing Roads 最小生成树Kruskal
查看>>
hdu 2489 Minimal Ratio Tree 最小生成树kruskal
查看>>
hdu 3790 最短路径问题 最短路Dijkstra
查看>>
hrbust 1339 Touring 最短路Dijkstra 邻接表
查看>>
UVA 4855 Hyper Box 斐波那契
查看>>
UVA 4857 Halloween Costumes 区间背包
查看>>
poj 2955 Brackets 括号匹配 区间dp
查看>>
hdu 2082 找单词 母函数
查看>>
HLG 2057 字典树 map
查看>>
SimpleDateFormat使用详解 java
查看>>
poj 1860 Currency Exchange 3259 Wormholes bellman 判环
查看>>
poj 1062 昂贵的聘礼 最短路bellman
查看>>
linux环境变量(转载)
查看>>
C语言中strlen与sizeof的区别(`$~新年快乐~$`!)
查看>>
struct msghdr与struct iovec
查看>>
编译和解释的区别是什么?
查看>>
unpv1 Makefile 文件 简略分析
查看>>