策略模式:针对同类算法的不同实现抽象成算法接口,并分别实现种具体的策略。此算法接口可以有多个。这样算法的变化就独立于算法的使用者。使用者使用的仅仅是策略接口。
下面给出一个实际的例子:
红色警戒2中的美国大病为例(大兵,火箭飞行兵,探亚,时空兵),这些兵种都有一个共性:能移动,会攻击。而他们移动和攻击的方式各不相同。
如何设计这样的兵种,让使用者不再关心具体的细节,只关心他们是兵就ok了。
思路:
设计一个攻击接口Attackable,设计一个移动接口Moveable,定义一个抽象的父类(Soldier)。
/** 
* 攻击接口 

* @author leizhimin 11-12-18 下午5:13 
*/ 
public  interface Attackable { 
         //攻击 
         void attacking(); 
}
/** 
* 移动接口 

* @author leizhimin 11-12-18 下午5:13 
*/ 
public  interface Moveable { 
         void moving(); 
}
/** 
* 士兵抽象类 

* @author leizhimin 11-12-18 下午5:14 
*/ 
public  abstract  class Soldier { 
         private Attackable attackable;         //攻击接口对象 
         private Moveable moveable;                 //移动接口对象

public Soldier(Attackable attackable, Moveable moveable) { 
                 this.attackable = attackable; 
                 this.moveable = moveable; 
        }

//每个士兵都会挂掉,惨叫一声、挂了后从单元集合中移除 
         public  void dead() { 
                doScreech();                                     //惨叫一声 
                System.out.println( "挂了,被系统从单元队列中移除!"); 
        }

//所有的兵死前都会惨叫,这个是惨叫声,需要具体的士兵实现 
         abstract  void doScreech();

public Attackable getAttackable() { 
                 return attackable; 
        }

public Moveable getMoveable() { 
                 return moveable; 
        } 
}

具体的攻击方式:
/** 
* 小手枪攻击 

* @author leizhimin 11-12-18 下午6:00 
*/ 
public  class HandgunAttack  implements Attackable { 
         public  void attacking() { 
                System.out.println( "小手枪攻击,噼~噼~噼~~~"); 
        } 
}
/** 
* AK47攻击 

* @author leizhimin 11-12-18 下午5:57 
*/ 
public  class Ak47Attack  implements Attackable{ 
         public  void attacking() { 
                System.out.println( "AK47攻击,哒哒哒......"); 
        } 
}
具体的移动方式:
/** 
* 天上飞行 

* @author leizhimin 11-12-18 下午6:05 
*/ 
public  class SkyMove  implements Moveable{ 
         public  void moving() { 
                System.out.println( "天上飞行!"); 
        } 
}
/** 
* 陆地走动 

* @author leizhimin 11-12-18 下午6:04 
*/ 
public  class WalkMove  implements Moveable{ 
         public  void moving() { 
                System.out.println( "陆地走动!"); 
        } 
}
/** 
* 陆地走动或者水里游动 

* @author leizhimin 11-12-18 下午6:07 
*/ 
public  class WalkOrSwimMove  implements Moveable{ 
         public  void moving() { 
                System.out.println( "陆地走动或者水里游动!"); 
        } 
}
然后定义三种类型的士兵:
/** 
* 探亚 

* @author leizhimin 11-12-18 下午5:50 
*/ 
public  class TanyaSoldier  extends Soldier {

public TanyaSoldier(Attackable attackable, Moveable moveable) { 
                 super(attackable, moveable); 
        }

@Override 
         void doScreech() { 
                System.out.println( "(探亚)呃~~~~~"); 
        }

}

/** 
* 飞行兵 

* @author leizhimin 11-12-18 下午6:19 
*/ 
public  class SkySoldier  extends Soldier { 
         public SkySoldier(Attackable attackable, Moveable moveable) { 
                 super(attackable, moveable); 
        }

@Override 
         void doScreech() { 
                System.out.println( "(飞行兵)噗——");

策略模式--红色警戒2之兵种设计相关推荐

  1. 基于策略模式的商场价格优惠设计

    基于策略模式的商场价格优惠设计 本文为个人的论文,由于一些原因未能发表,所以拿出来和朋友分享下 注:本文配有源码,如有需要的朋友,请在留言中留下邮箱地址,我会在第一时间发送     本文介绍一种基于策 ...

  2. 【Head First 模式设计】第1章 策略模式

    Intro to Design Patterns Welcome to Design Patterns SimUDuck应用程序 一个模拟鸭子游戏:SimUDuck.游戏中会出现各种鸭子,一边游泳,一 ...

  3. 这可能是把策略模式讲的最通俗易懂得文章了!

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 本文转载自微信公众号:漫话编程  周末无事,窝在家里面看<权力的游戏第八季>,看的 ...

  4. 设计模式学习---策略模式

    最近在看"Head First 设计模式"这本书,便想将自己所学的记录下来以加深理解,文中肯定有许多不足之处,请各位前辈们指出. 什么是设计模式 设计模式并不是某种开发语言中的工具 ...

  5. 漫画:如何给女朋友解释什么是策略模式?

    责编 | 伍杏玲 本文经授权转载自漫话编程(ID:mhcoding) 周末无事,窝在家里面看<权力的游戏第八季>,看的很是津津有味,虽然感觉有一点点要烂尾,但是我还是忍不住要去看到底谁可 ...

  6. 策略模式和工厂模式的区别_设计模式系列 — 策略模式

    点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 23种设计模式速记 单例(si ...

  7. C++设计模式之策略模式(行为型模式)

    学习软件设计,向OO高手迈进! 设计模式(Design pattern)是软件开发人员在软件开发过程中面临的一般问题的解决方案. 这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来 ...

  8. 设计模式之策略模式(实例+Demo)

    马上要放清明小长假了,各位都想好去哪里玩了没?清明前的周日,整理下发型,梳理好心情,发个文章,再思考下清明去哪玩,哈哈哈. 不多废话,切入正题: 你从本文主要能了解到如下几点:1. 为什么要写这篇文章 ...

  9. 设计模式解读之一: 策略模式——鸭子游戏

    设计模式解读之一: 策略模式--鸭子游戏 当我们掌握了Java的语法,当我们了解了面向对象的封装.继承.多态等特性,当我们可以用Swing.Servlet.JSP技术构建桌面以及Web应用,不意味着我 ...

最新文章

  1. vs如何设置对话框显示在最前面_【另存为】对话框的使用
  2. 在家搭建大数据分布式计算环境!
  3. 向阿里学数字化转型,驱动业绩新增长
  4. 利用SAP FR高效预测客户需求
  5. 递归算法转换为非递归算法的技巧
  6. 浮点数用大小端存储吗_干细胞存储有什么用,干细胞有必要存储吗
  7. 如何理解Java的类变量、成员变量、常量、类属性、实例属性、字段(field)、成员方法、类方法
  8. Java 12 - Java StringBuffer和StringBuilder类
  9. UDT源码剖析(二):UDT自带例程recvfile注释
  10. makefile 编译不同目录下的源文件
  11. SQLServer基础之数据页类型:GAM,SGAM,PFS
  12. python中如何调用图像处理库_python怎么调用图像处理
  13. 关于ubuntu上,usb设备编号
  14. 不需要密码卸载Symantec Endpoint Protection
  15. 网站运营中同时把握好网站推广和用户体验度
  16. [转载]Palm 串行通讯GPS数据读取的实现
  17. bat批量修改文件名
  18. 超级计算机的等级,亿亿次级别运算曙光初现-超级计算机,千万亿次,TeraScale,万万亿次,ExaScale ——快科技(驱动之家旗下媒体)--科技改变未来...
  19. 【PAT甲级】1062 Talent and Virtue (25分)
  20. 音频视频播放器 on PPC

热门文章

  1. 项目经理在团队不同阶段的领导风格
  2. 安装net_speeder
  3. 制作简易的牛顿摆锤模型
  4. 新一代红米参数模糊的背后 是否有欺诈嫌疑?
  5. 瞬息万变的技术圈与焦虑的技术人,进阶Android需要掌握的那几个关键技术!
  6. 【已解】英雄联盟lol撸啊撸“寻找对局”按钮无法点击,开不了赛解决方法
  7. 绝绝子!京东大牛用一文将Python 接口自动化测试解析透彻的不行~
  8. 高德地图基于阿里云MaxCompute的最佳实践
  9. 你对本岗位的认识PHP,本岗位工作认识
  10. PostgreSQL 源码解读(31)- 查询语句#16(查询优化-表达式预处理#1)