設(shè)計(jì)模式---抽象工廠模式(DesignPattern_AbstractFactory)

DesignPattern_AbstractFactory

摘錄自:設(shè)計(jì)模式與游戲完美開(kāi)發(fā)

十年磨一劍,作者將設(shè)計(jì)模式理論巧妙地融入到實(shí)踐中,以一個(gè)游戲的完整實(shí)現(xiàn)呈現(xiàn)設(shè)計(jì)模式的應(yīng)用及經(jīng)驗(yàn)的傳承 《軒轅劍》之父——蔡明宏、資深游戲制作人——李佳澤、Product Evangelist at Unity Technologies——Kelvin Lo、信仁軟件設(shè)計(jì)創(chuàng)辦人—— 賴信仁、資深3D游戲美術(shù)——?jiǎng)⒚鲪? 聯(lián)合推薦全書(shū)采用了整合式的項(xiàng)目教學(xué),即以一個(gè)游戲的范例來(lái)應(yīng)用23種設(shè)計(jì)模式的實(shí)現(xiàn)貫穿全書(shū),讓讀者學(xué)習(xí)到整個(gè)游戲開(kāi)發(fā)的全過(guò)程和作者想要傳承的經(jīng)驗(yàn),并以淺顯易懂的比喻來(lái)解析難以理解的設(shè)計(jì)模式,讓想深入了解此領(lǐng)域的讀者更加容易上手。

工程GitHub

ABSTRACT FACTORY -----追MM少不了請(qǐng)吃飯了,麥當(dāng)勞的套餐和肯德基的套餐都是MM愛(ài)吃的東西,雖然口味有所不同,但不管你帶MM去麥當(dāng)勞或肯德基,只管向服務(wù)員說(shuō)“兩個(gè)B套餐”就行了。麥當(dāng)勞和肯德基就是B套餐的Abstract Factory, B套餐里含有漢堡, 雞翅和飲料. 麥當(dāng)勞或肯德基會(huì)根據(jù)B套餐的規(guī)格, 讓漢堡Factory, 雞翅Factory, 飲料Factory分別生產(chǎn)對(duì)應(yīng)B套餐的材料.

抽象工廠模式:客戶類(lèi)和工廠類(lèi)分開(kāi)。消費(fèi)者任何時(shí)候需要某套產(chǎn)品集合時(shí),只需向抽象工廠請(qǐng)求即可。抽象工廠會(huì)再向具體的工廠生產(chǎn)出符合產(chǎn)品集規(guī)格的產(chǎn)品.

using UnityEngine;
using System.Collections;

namespace DesignPattern_AbstractFactory
{
    // 可生成各抽象成品物件的操作
    public abstract class AbstractFactory
    {
        public abstract AbstractProductA CreateProductA();
        public abstract AbstractProductB CreateProductB();
    }

    // 實(shí)例工廠建造相應(yīng)產(chǎn)品操作1
    public class ConcreateFactory1 : AbstractFactory
    {
        public ConcreateFactory1() { }

        public override AbstractProductA CreateProductA()
        {
            return new ProductA1();
        }
        public override AbstractProductB CreateProductB()
        {
            return new ProductB1();
        }
    }

    // 實(shí)例工廠建造相應(yīng)產(chǎn)品操作2
    public class ConcreateFactory2 : AbstractFactory
    {
        public ConcreateFactory2() { }

        public override AbstractProductA CreateProductA()
        {
            return new ProductA2();
        }
        public override AbstractProductB CreateProductB()
        {
            return new ProductB2();
        }
    }

    // 抽象產(chǎn)品類(lèi)A
    public abstract class AbstractProductA
    {
    }

    // 產(chǎn)品A1
    public class ProductA1 : AbstractProductA
    {
        public ProductA1()
        {
            Debug.Log("生成物件類(lèi)型A1");
        }
    }

    // 產(chǎn)品A2
    public class ProductA2 : AbstractProductA
    {
        public ProductA2()
        {
            Debug.Log("生成物件類(lèi)型A2");
        }
    }

    // 抽象產(chǎn)品類(lèi)A
    public abstract class AbstractProductB
    {
    }

    // 產(chǎn)品B1
    public class ProductB1 : AbstractProductB
    {
        public ProductB1()
        {
            Debug.Log("生成物件類(lèi)型B1");
        }
    }

    // 產(chǎn)品B2
    public class ProductB2 : AbstractProductB
    {
        public ProductB2()
        {
            Debug.Log("生成物件類(lèi)型B2");
        }
    }
}
using UnityEngine;
using System.Collections;
using DesignPattern_AbstractFactory;

public class AbstractFactoryTest : MonoBehaviour
{
    void Start()
    {
        UnitTest();
    }


    void UnitTest()
    {
        AbstractFactory Factory = null;

        // 工廠1
        Factory = new ConcreateFactory1();
        // 生產(chǎn)2個(gè)產(chǎn)品
        Factory.CreateProductA();
        Factory.CreateProductB();

        // 工廠2
        Factory = new ConcreateFactory2();
        // 產(chǎn)生2個(gè)產(chǎn)品
        Factory.CreateProductA();
        Factory.CreateProductB();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容