java12種設計模式之策略模式
阿新 • • 發佈:2019-01-06
策略模式:
以王者榮耀的英雄選擇召喚師技能為準!
條件需要:
- 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召喚師技能,由於是介面,需要建立它的實現類
總結思想
齊天大聖英雄和它的召喚師技能不能分配在一起,所以分隔。齊天大聖英雄需要配置召喚師技能,所以用一個包括這兩個的一個英雄類,比較抽象,不具體。它應該是繼承齊天大聖英雄類,對於召喚師技能這樣少得,用介面即可。
所以英雄類是抽象類,攻擊方式和開場白應該也是模糊,也是抽象方法。它繼承齊天大聖英雄類。
英雄類也同時包括召喚師技能這樣的一個介面屬性。
英雄類就把,齊天大聖英雄類和介面同時封裝起來了。 後期維護方便