設計模式學習筆記三——Abstract Factory模式

來源:互聯網
上載者:User
動機:實現一系列相互依賴對象的建立,通過封裝系列對象建立來隔離對象建立和客戶程式,從而能夠靈活提供更多系列對象建立和系列對象間的切換,而不需要改變客戶程式。

應用:多種風格軟體介面控制項的建立、對應多種資料庫的多系列資料訪問層對象的建立(比如Petshop中的資料訪問層對象)。

情境:此處以ThinkPad系列產品的組裝為例子。組裝電腦程式(即客戶)需要根據需要拿出不同系列ThinkPad(此處以T43和T60為例)組件(以CPU和主板為例)組裝成ThinkPad。因為T43和T60的CPU系列介面不同,所以同一系列中的CPU和主板相互依賴,每次只能拿同一系列的CPU和主板進行組裝。

Factory Method模式:Factory Method模式是Abstract Factory模式的特殊形式,它實現一個對象的建立,而Abstract Factory模式實現系列對象建立。如這裡只涉及到多種CPU的建立,則變為了Factory Method模式。

結構

代碼實現

/**//*
* 產品CPU
*/
namespace DesignPattern.AbstractFactory
{
    public abstract class CPU
    {
    }

    public class T43CPU : CPU
    {
    }

    public class T60CPU : CPU
    {
    }
}

/**//*
* 產品主板
*/
namespace DesignPattern.AbstractFactory
{
    public abstract class Mainboard
    {
    }

    public class T43Mainboard : Mainboard
    {
    }

    public class T60Mainboard : Mainboard
    {
    }
}

/**//*
 * 不同ThinkPad系列相互依賴組件組成不同型號ThinkPad,此處忽略各種不同型號。
*/
namespace DesignPattern.AbstractFactory
{
    public class ThinkPad
    {
        public void Play()
        {
        }
    }
}

/**//*
 * ThinkPad工廠,生產各型號ThinkPad組件
*/
namespace DesignPattern.AbstractFactory
{
    public abstract class ThinkPadFactory
    {
        public abstract CPU CreateCPU();
        public abstract Mainboard CreateMainboard();
    }

    public class T43Factory : ThinkPadFactory
    {
        public override CPU CreateCPU()
        {
            return new T43CPU();
        }

        public override Mainboard CreateMainboard()
        {
            return new T43Mainboard();
        }
    }

    public class T60Factory : ThinkPadFactory
    {
        public override CPU CreateCPU()
        {
            return new T60CPU();
        }

        public override Mainboard CreateMainboard()
        {
            return new T60Mainboard();
        }
    }
}

/**//*
* 客戶程式,從ThinkPad工廠中拿出所需系列組件進行組裝。
*/
namespace DesignPattern.AbstractFactory
{
    public class ThinkPadAssembly
    {
        public static readonly ThinkPadAssembly Instanse = new ThinkPadAssembly();

        public ThinkPad CreateThinkPad(string strThinkPadName)
        {
            ThinkPadFactory thinkPadFactory = (ThinkPadFactory)Assembly.Load("DesignPattern.AbstractFactory").CreateInstance("DesignPattern.AbstractFactory" + "." + strThinkPadName + "Factory");
            CPU cpu = thinkPadFactory.CreateCPU();
            Mainboard mainboard = thinkPadFactory.CreateMainboard();

            return Assemble(cpu, mainboard);
        }

        private ThinkPad Assemble(CPU cpu, Mainboard mainboard)
        {
            // 組裝並返回ThinkPad,此處簡化各種型號的ThinkPad
            return new ThinkPad();
        }
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.