1. 程式人生 > 實用技巧 >設計模式之抽象方法

設計模式之抽象方法

結構圖如上:

我用RTS遊戲裡的例子來套用下這個結構:假如現在要開發一款二戰題材及時對戰遊戲,遊戲裡包括美國和日本兩個勢力,遊戲開始:選擇美國勢力的玩家在地圖上建造了一個兵工廠(UsaFactory類)用來生產美軍攻擊單位例如坦克(UsaTank類),美軍戰鬥機(UsaPlane),選擇日本勢力的玩家開局也選擇建造一個兵工廠(JapannFactoy類),可以生產日本坦克(JapanTank類),日本戰鬥機(JapnePlane類)。我們將這些類設計成上面的那樣:

之後貼出實現程式碼:

//abstract Products
public abstract class AirPlane
{
    
public abstract void Fly(); } public abstract class Tank { public abstract void Move(); } //abstract factory,可以理解成工廠裡的生產線 //不同的生產線所生產的產品不同 public abstract class ProductionLine { public abstract AirPlane CreatePlane(); public abstract Tank CreateTank(); } //Concreate products public class
JapanPlane : AirPlane { public override void Fly() { Debug.Log("Japan plane flying"); } } public class UsaPlane : AirPlane { public override void Fly() { Debug.Log("america plane flying"); } } public class JapanTank : Tank { public override void Move() { Debug.Log(
"Japan tank moving"); } } public class UsaTank : Tank { public override void Move() { Debug.Log("USA tank moving"); } } //Concreate Factory public class JapanFactory : ProductionLine { public override AirPlane CreatePlane() { return new JapanPlane(); } public override Tank CreateTank() { return new JapanTank(); } } public class UsaFactory : ProductionLine { public override AirPlane CreatePlane() { return new UsaPlane(); } public override Tank CreateTank() { return new UsaTank(); } }

我們簡單測試下改如何使用:

兩個OnClicked方法用UGUI的button繫結起來

public  class TestA : MonoBehaviour
{
    UsaFactory usaFactory;
    JapanFactory japanFactory;
    private void Awake()
    {
         usaFactory = new UsaFactory();
         japanFactory = new JapanFactory();
    }
    
    public void OnClickedUSA()
    {
        usaFactory.CreatePlane().Fly();
        usaFactory.CreateTank().Move();
    }
    public void OnClickedJapan()
    {
        japanFactory.CreateTank().Move();
        japanFactory.CreatePlane().Fly();
    }
}

執行結果:點選USA按鈕生成一個UsaPlane物件並呼叫Fly方法,生成一個UsaTank物件並呼叫Move方法;

點選Japan按鈕生成一個JapanPlane物件並呼叫Fly方法,生成一個JapanTank物件並呼叫Move方法;

只是照貓畫虎的使用了這個模式,在實際開發中實現估計會更復雜,要考慮更多因素。