java12种设计模式之策略模式

策略模式:

以王者荣耀的英雄选择召唤师技能为准!

条件需要:

  • 1.首先需要英雄
  • 2.需要召唤师技能

如何搭建策略模式

    分析:如果每个英雄类直接实现召唤师技能接口会麻烦。耦合度高,英雄应该只负责它英雄,接口应该也不能直接使用的。所以需要把这个拆分出来。

    搭建思想:

  • 1.创建一个抽象Hero模板类。
  • 2.创建一个齐天大圣英雄类
  • 3.创建一个ISkill技能接口
  • 4.实现ISkill召唤师技能接口的实现类,JiPao,疾跑类

详细代码:

抽象模板类Hero

package strategymode;
/*
 * 英雄类,抽象类
 */
public abstract class Hero {
	
	//英雄的名称
	private String HeroName;
	//英雄的召唤师技能的接口,(组合关系,需要使用时,需要传入一个具体的技能对象)
	private ISkill iSkill;
	
	//英雄的自我介绍的方式
	public abstract void display();
	
	//英雄的普通攻击的方法
	public abstract void normalAttack();
	
	//英雄的召唤师技能使用方法
	public void skill() {
		iSkill.useSkill();
	}
	
	//set/get
	public String getHeroName() {
		return HeroName;
	}

	public void setHeroName(String heroName) {
		HeroName = heroName;
	}

	public ISkill getiSkill() {
		return iSkill;
	}

	public void setiSkill(ISkill iSkill) {
		this.iSkill = iSkill;
	}
	


}

齐天大圣英雄类

package strategymode;

/*
 * 英雄类,齐天大圣
 */
public class QTDS extends Hero {
	
	//编写构造方法
	public QTDS() {
		super.setHeroName("齐天大圣");
	}

	//齐天大圣的自我介绍
	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println("俺老孙来也");
	}

	//齐天大圣的普通攻击
	@Override
	public void normalAttack() {
		// TODO Auto-generated method stub
		System.out.println("pangpangpang。。");
	}
	

}

 

ISkill召唤师技能接口

package strategymode;

public interface ISkill {

	/**
	 * 使用召唤师技能方法
	 */
	public abstract void useSkill();
	
}

ISkill召唤师技能接口实现类,疾跑JiPao

package strategymode;

/*
 * 召唤师技能
 */
public class JiPao implements ISkill {

	@Override
	public void useSkill() {
		System.out.println("疾跑,加百分之40速度持续8秒!");
		
	}
	

}

最后测试类

package strategymode;

/*
 * 英雄与技能的调试类
 */
public class HeroTest {

	public static void main(String[] args) {
		
		//1.选择英雄
		Hero hero = new QTDS();
		
		//2.英雄的自我介绍
		System.out.println("英雄"+hero.getHeroName()+"自我介绍");
		hero.display();
		
		//3.设置英雄召唤师技能
		hero.setiSkill(new KuangBao());
		
		//4.游戏开始
		System.out.println("游戏开始,请做好准备");
		
		//5.使用英雄的普通攻击
		hero.normalAttack();
		
		//6.使用英雄的召唤师技能的方法
		hero.skill();
		
	}
}

 

主要步骤:

       实例QTDS(齐天大圣英雄)这个类来创建Hero这个英雄模板类。

        hero.display();

        hero.setiSkill(new KuangBao());它就可以使用这两个方法了,这两个方法时QTDS完成了Abstract类的抽象方法

        hero.setiSkill(new KuangBao());  设置召唤师技能。Hero这个类接收ISkill召唤师技能,由于是接口,需要创建它的实现类

 

总结思想

      齐天大圣英雄和它的召唤师技能不能分配在一起,所以分隔。齐天大圣英雄需要配置召唤师技能,所以用一个包括这两个的一个英雄类,比较抽象,不具体。它应该是继承齐天大圣英雄类,对于召唤师技能这样少得,用接口即可。

     所以英雄类是抽象类,攻击方式和开场白应该也是模糊,也是抽象方法。它继承齐天大圣英雄类。

     英雄类也同时包括召唤师技能这样的一个接口属性。

     英雄类就把,齐天大圣英雄类和接口同时封装起来了。 后期维护方便

 

 

 

    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值