java设计模式之策略模式
来源:互联网 发布:暖通空调设计常用数据 编辑:程序博客网 时间:2024/06/01 07:15
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
情景模拟:
Character(角色)是抽象类,由具体的角色来继承。具体的角色包括:国王(King)、皇后(Queen)、骑士(Knight)、妖怪(Troll)。而Weapon(武器)是接口,由具体的武器来继承。所有实际的角色和武器都是具体类。
任何角色如果想换武器,还可以调用setWeapon()方法,此方法定义在Character超类中。在打斗(fight)过程中,会调用到目前武器的useWeapon()方法,攻击其它角色。
类图:
Character类图
Weapon类图
Character类代码实现:
package com.fight;
public abstract class Character {
WeaponBehavior weapon;public abstract void fight();public void setWeapon(WeaponBehavior w){ this.weapon = w;}
}
King类代码实现:
package com.fight;
public class King extends Character{
public King(){ weapon = new SwordBehavior();}@Overridepublic void fight() { // TODO Auto-generated method stub weapon.useWeapon();}
}
Queen类代码实现:
package com.fight;
public class Queen extends Character{
public Queen(){ weapon = new KnifeBehavior();}@Overridepublic void fight() { // TODO Auto-generated method stub weapon.useWeapon();}
}
Knight类代码实现:
package com.fight;
public class Knight extends Character{
public Knight(){ weapon = new BowAndArrowBehavior();}@Overridepublic void fight() { // TODO Auto-generated method stub weapon.useWeapon();}
}
Troll类代码实现:
package com.fight;
public class Troll extends Character{
public Troll(){ weapon = new AxeBehavior();}@Overridepublic void fight() { // TODO Auto-generated method stub weapon.useWeapon();}
}
WeaponBehavior类代码实现:
package com.fight;
public interface WeaponBehavior {
public void useWeapon();
}
SwordBehavior类代码实现:
package com.fight;
public class SwordBehavior implements WeaponBehavior{
//@Overridepublic void useWeapon() { // TODO Auto-generated method stub System.out.println("使用宝剑飞舞");}
}
KnifeBehavior类代码实现:
package com.fight;
public class KnifeBehavior implements WeaponBehavior{
//@Overridepublic void useWeapon() { // TODO Auto-generated method stub System.out.println("使用匕首刺杀");}
}
BowAndArrowBehavior类代码实现:
package com.fight;
public class BowAndArrowBehavior implements WeaponBehavior{
//@Overridepublic void useWeapon() { // TODO Auto-generated method stub System.out.println("使用弓箭射击");}
}
AxeBehavior类代码实现:
package com.fight;
public class AxeBehavior implements WeaponBehavior {
//@Overridepublic void useWeapon() { // TODO Auto-generated method stub System.out.println("使用斧头砍劈");}
}
测试类FightSimulator代码实现:
package com.fight;
public class FightSimulator {
/** * @param args */public static void main(String[] args) { // TODO Auto-generated method stub Character character = new King(); character.fight(); character.setWeapon(new KnifeBehavior()); character.fight();}
}
运行结果:
使用宝剑飞舞
使用匕首刺杀
- Java设计模式之策略设计模式
- Java设计模式之策略设计模式
- Java设计模式之策略
- Java设计模式之策略模式
- java设计模式之 策略模式
- JAVA 设计模式之 策略模式
- java设计模式之策略模式 Strategy
- java设计模式之策略模式
- java设计模式之策略模式
- 浅谈Java设计模式之---策略模式
- java设计模式之策略模式
- Java设计模式之策略模式
- java设计模式之策略模式
- Java设计模式之策略模式
- Java设计模式之策略模式
- java设计模式之策略模式
- 设计模式之策略模式(java)
- Java设计模式笔记之策略模式
- 指向常变量的指针变量,在其指向一个非const变量期间,该非const变量具有常变量特征(其它期间仍然是非const变量)
- jquery常用方法&ajax
- MyBatis的一对多关系的举例简单说明
- 365. Water and Jug Problem
- android的网络通信之Socket
- java设计模式之策略模式
- linux-搭建web服务器系列--安装jdk(三)
- 堆排序
- 01JavaScript基础
- 自己对JSP的理解
- Fragment之间Fragment传值
- teamviewer的侧栏问题
- Spring事件机制的简单例子
- 17 - 04 - 01 图解HTTP(36)