策略模式范例:有关足球的场景

开发 后端
本文通过一个有关足球的场景,介绍了策略模式的使用。简单来说,策略模式就是将动作定义为标准并封装,从而使具体操作和实现分离。

你了解策略模式么?如果你对足球很熟悉,那么看了下面的介绍后,你大概会同样熟悉策略模式了。

这里设计了一个有关足球的场景,在进攻当中暂分为传球和射门两个动作。

最开始你可能会这样想,设计一个抽象类(Attact),传球和射门分别定义好,子类会有一些他们个性的东西。比如球员号码,教练名称等等。

后来你发现传球和射门可能会分好多种,传球可分为短传和长传,射门又分为巴蒂式射门和因扎吉式的抢点。这样就不能将他们都写在这个抽象类(Attact)中,比如有的队员就是一个工兵型的(像AC米兰的加图索)他不停的抢断传球,很少参与到射门当中来。这样再定义若干个子类来继承(Attact)就不能满足需求。

我们可以把诸如传球和射门等动作抽象出来。组合到该抽象类中,只需在其中调用具体的方法即可。

像这样来定义:(其中Passable和Shootable为行为接口)

  1. package strategy;  
  2.  
  3. /**  
  4.  * @author edison  
  5.  * @date 2009-9-24  
  6.  */ 
  7. public abstract class Attact {  
  8.  Passable pass;  
  9.  Shootable shoot;  
  10.    
  11.  public abstract void display();  
  12.    
  13.  public void ownPass(){  
  14.   pass.action();  
  15.  }  
  16.  public void ownShoot(){  
  17.   shoot.action();  
  18.  }  
  19.  
  20.  public void setPass(Passable pass) {  
  21.   this.pass = pass;  
  22.  }  
  23.  
  24.  public void setShoot(Shootable shoot) {  
  25.   this.shoot = shoot;  
  26.  }  
  27.    
  28. }  
  29.  

这里我们采用了策略模式,将传球和射门这一类动作定义为标准,封装起来,让他们之间可以互相的组合和替换,这样有效的使具体操作和实现分离。

上面一段话也可以这样说:

策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

得到几个设计原则:

1.找到应用中可能变化之处,把它们独立初以来,不要和那些不需要变化的代码混在一起。

2.针对接口编程,而不是针对实现编程。

3.多用组合,少用继承。

类图:

类图 

以上就是策略模式的一个简单案例。

【编辑推荐】

  1. ASP.NET缓存中Cache过期的三种策略
  2. WCF安全之基于自定义声明授权策略
  3. Hibernate学习笔记之Lazy策略
  4. J2EE事务并发控制策略总结
  5. 揭秘Google背后的IT架构策略
责任编辑:yangsai 来源: JavaEye博客
相关推荐

2022-05-13 07:26:28

策略模式设计模式

2022-10-28 07:15:26

策略模式使用场景UML

2009-08-18 11:03:31

Observer设计模

2021-11-04 06:58:32

策略模式面试

2017-07-04 16:18:28

云适配场景解决方案

2012-08-30 09:07:33

设计模式

2017-07-07 10:55:14

数据库MongoDB设计模式

2013-11-26 16:09:34

Android设计模式

2009-08-14 09:40:55

MyEclipse整合

2021-08-09 10:33:51

人工智能

2021-06-09 08:53:34

设计模式策略模式工厂模式

2015-09-08 13:39:10

JavaScript设计模式

2023-03-20 09:17:13

策略模式Springboot

2023-02-22 09:16:22

2011-07-20 14:04:42

.NET策略模式

2009-08-19 10:34:16

反爬虫

2010-02-06 10:04:10

Android启动模式

2009-08-12 11:40:39

双检测锁定

2014-12-30 13:08:47

飞鱼星无线云

2024-10-06 12:56:36

Golang策略设计模式
点赞
收藏

51CTO技术栈公众号