设计模式之策略模式

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


2、示例:游戏角色与武器的功能实现,不同的角色可以使用不同的武器,而且在游戏过程中可以随时切换武器,为了便于扩展,采用策略模式实现。

//角色的超类,所有的角色都继承自此类
public class Character{
	WeaponBehavior mWeaponBehavior;//定义所使用的武器接口对象,每种武器都会引用实现WeaponBehavior接口对象
	//更多对象
	    				
	//超类对角色共性的默认实现
	.......
	    				
	//打斗的方法
	public void performFight(){
		mWeaponBehavior.useWeapon();
	}
	    				
	public void setWeaponBehavior(WeaponBehavior weaponBehavior){
	      this.mWeaponBehavior=weaponBehavior;
	}
	    		
}
	    		
//国王角色,继承自超类Character
public Class King extends Character{
	    				
	public King(){
		//国王使用SwordBehavior类(宝剑)进行打斗,当performFight()被调用时用宝剑攻击对方
		mWeaponBehavior=new SwordBehavior();
	    						
	    	//更多对象
	    	......
	}
}
	    		
//骑士角色,继承自超类Character
public Class Knight extends Character{
	    				
	public Knight(){
		//骑士使用BowAndArrowBehavior类(弓箭)进行打斗,当performFight()被调用时用弓箭攻击对方
	    	mWeaponBehavior=new BowAndArrowBehavior();
	    						
	    	//更多对象
	    	......
	}
}
	    		
//更多种类的角色类实现
......
	    		
	    		
//武器的接口
public interface WeaponBehavior{
	 //定义统一的攻击方法
	 public void useWeapon();
}
	    		
//宝剑的实现类
public class SwordBehavior implements WeaponBehavior{
	//实现发声的方法
	public void useWeapon(){
		System.out.println("实现用宝剑攻击");
	}
}
	    		
//弓箭的实现类
public class BowAndArrowBehavior implements WeaponBehavior{
	//实现发声的方法
	public void useWeapon(){
		System.out.println("实现用弓箭攻击");
	}
}
	    		
//更多的武器实现类
......


3、总结:此例子虽然简单,但是突出了策略模式的精髓:封装了变化的部分(不同的角色可以使用不同的武器),使变化的部分独立于不变的部分;面向接口编程,而非面向实现编程,使代码更有弹性,并且可以通过setter方法在打斗过程中动态的改变角色所使用的武器;利用组合的方式成功的扩展了对象的功能,避免了利用继承带来的代码重写等问题。

    注:此例子模仿深入浅出设计模式一书中关于策略模式的讲解中的例子。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值