1. 程式人生 > >java12種設計模式之策略模式

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召喚師技能,由於是介面,需要建立它的實現類

總結思想

      齊天大聖英雄和它的召喚師技能不能分配在一起,所以分隔。齊天大聖英雄需要配置召喚師技能,所以用一個包括這兩個的一個英雄類,比較抽象,不具體。它應該是繼承齊天大聖英雄類,對於召喚師技能這樣少得,用介面即可。

     所以英雄類是抽象類,攻擊方式和開場白應該也是模糊,也是抽象方法。它繼承齊天大聖英雄類。

     英雄類也同時包括召喚師技能這樣的一個介面屬性。

     英雄類就把,齊天大聖英雄類和介面同時封裝起來了。 後期維護方便