設計模式學習筆記-Factory 方法

來源:互聯網
上載者:User

概述:                                                                                                       

Factory 方法(factory method):Factory 方法通過一個抽象類別實現了所有對產品的加工作業碼,唯獨將產品的構建方法寫成抽象方法。繼承這個抽象類別的具體類只重寫其構建方法,這樣就實現了對於不同被構建產品複用相同的加工操作邏輯。Factory 方法適用於需要在子類中才能決定執行個體化哪個被操作對象,同時這些被操作對象又複用相同操作邏輯的場合。

類圖:                                                                                                                                 

程式碼範例:                                                                                                  

1.工廠裡的產品抽象類別

    /// <summary>
/// 工廠裡的產品抽象類別
/// </summary>
public abstract class Product{}

2.具體的產品

    /// <summary>
/// 具體的產品
/// </summary>
public class ConcreteProduct : Product{}

3.建立含有Factory 方法的抽象業務類

    /// <summary>
/// 含有Factory 方法的抽象業務類
/// </summary>
public abstract class Creator
{
void FactoryMethod();
}

4.具體的Factory 方法實作類別

    /// <summary>
/// 具體的Factory 方法實作類別
/// </summary>
public class ConcreteCreator : Creator
{
void FactoryMethod();
}

其他樣本:                                                                                                  

步驟很簡單,為了防止自己忘記,從部落格園裡摘抄噬菌體大哥的一個例子,稍微改進一下便於理解

View Code

    ///
/// 產品介面
///
public abstract class IProduct
{
public abstract void Behavior();
}
///
/// A類型產品
///
class ProductA : IProduct
{
public override void Behavior()
{
Console.WriteLine("產品A的行為");
}
}
///
/// B類型產品
///
class ProductB : IProduct
{
public override void Behavior()
{
Console.WriteLine("產品B的行為");
}
}
///
/// 含有Factory 方法的抽象業務類
///
public abstract class ACreator
{
public abstract IProduct FactoryMethod();

public void OpreateMethod()
{
IProduct product = FactoryMethod();

//對product的一系列操作
}
}

///
/// 生產A類型產品的具體業務類
///
public class CreatorA : ACreator
{
public override IProduct FactoryMethod()
{
return new ProductA();
}
}

///
/// 生產B類型產品的具體業務類
///
public class CreatorB : ACreator
{
public override IProduct FactoryMethod()
{
return new ProductB();
}
}

 用戶端調用:

            ACreator create = new CreatorA();
IProduct product = create.FactoryMethod();
product.Behavior();

補充TerryLee的例子                                                                                  

原始錯誤已經更正過來

View Code

namespace DesignPatternLab.FactoryMethodPackage
{
class FactoryMethodSample4
{
}
/// <summary>
/// 定義抽象介面
/// </summary>
public abstract class Log
{
public abstract void Write();
}
/// <summary>
/// 具體實作類別
/// </summary>
public class EventLog : Log
{
public override void Write()
{
Console.WriteLine("EventLog Write Success"); ;
}
}
/// <summary>
/// 具體實作類別
/// </summary>
public class FileLog : Log
{
public override void Write()
{
Console.WriteLine("FileLog Write Success");
}
}
/// <summary>
/// 定義抽象方法介面
/// </summary>
public abstract class LogFactory
{
public abstract Log Create();
}
/// <summary>
/// 具體實現的執行個體化類
/// </summary>
public class EventFactory:LogFactory
{
public override Log Create()
{
return new EventLog();
}
}
/// <summary>
/// 具體實現執行個體化的類
/// </summary>
public class FileFactory : LogFactory
{
public override Log Create()
{
return new FileLog();
}
}
}
//用戶端調用如下
LogFactory factory = new EventFactory();
Log log = factory.Create();
log.Write();

  

小結:                                                                                                       

原廠模式應用的非常多,希望記住,能熟練應用,最起碼面試的時候能寫出來


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.