65.9K
CodeProject 正在变化。 阅读更多。
Home

C#:抽象工厂模式

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.17/5 (28投票s)

2007年6月18日

CPOL
viewsIcon

95150

downloadIcon

908

本教程描述了 C# 中抽象工厂模式的实现

引言

设计模式使重用成功的设计和架构变得更容易。
设计模式帮助您选择使系统可重用的设计替代方案,并避免损害可重用性的替代方案。
抽象工厂提供了一个接口,用于创建一组相关的对象,而无需指定它们的具体类。

抽象工厂模式允许我们将相似的工厂类组合在一起。在下面的示例中,我们将用于创建印度面包的工厂和用于创建美式面包的工厂组合在一起,然后我们根据运行时获取的信息来决定创建哪“种”面包。

使用代码

下面是用 C# 的实现。

//Let's define type of bread bases
public enum BreadBase
{
     HotIndianMasalaBase,
     PunjabiTadkaBase,
     ItalianCheeseBase,
     VeggieBase,
}
//This is a breadfactory where people visit to get their favorite bread bases
public interface BreadFactory
{
    Bread GetBread(BreadBase BreadBase);
}

//The abstract bread
public interface Bread
{
    void Bake();
}

//create concrete classes

public class HotIndianMasalaBread :Bread
{
    public void Bake()
    {
        Console.WriteLine ("For you::Hotindian Masala base Bread.");
    }
}
public class VeggieBread : Bread
{
    public void Bake()
    {
        Console.WriteLine("For you::Veggie base Bread.");
    }
}

public class ItalianCheeseBread : Bread
{
    public void Bake()
    {
        Console.WriteLine("For you::Italian cheese base Bread.");
    }
}
public class PunjabiTadkaBaseBread : Bread
{
    public void Bake()
    {
        Console.WriteLine("For you::Punjabi tadka base bread.");
    }
}
//Lets create bread factories aka concrete classes

public class AmericanBreadFactory :BreadFactory
{
    public Bread GetBread(BreadBase BreadBase)
    {
        Bread vBread = null;
        switch (BreadBase)
        {
            case BreadBase.VeggieBase:
                vBread = new VeggieBread();
                break;
            case BreadBase.ItalianCheeseBase:
                vBread = new ItalianCheeseBread();
                break;
        }
        return vBread;
    }
}

public class IndianBreadFactory :BreadFactory
{
    public Bread GetBread(BreadBase BreadBase)
    {
        Bread vBread = null;
        switch (BreadBase)
        {
            case BreadBase.HotIndianMasalaBase:
                vBread = new HotIndianMasalaBread();
                break;
            case BreadBase.PunjabiTadkaBase:
                vBread = new PunjabiTadkaBaseBread();
                break;
        }
        return vBread;
    }
}

//lets order breads

class Program
{
    static void Main(string[] args)
    {
    //example of abstract factory
    AmericanBreadFactory vAmericanBread = new AmericanBreadFactory();
    Bread vBread = vAmericanBread.GetBread(BreadBase.VeggieBase);
    vBread.Bake();

    //lets bak indian punjabi tadka bread
    IndianBreadFactory vIndianBreadFactory = new IndianBreadFactory();
    Bread vIndianBread = vIndianBreadFactory.GetBread(BreadBase.PunjabiTadkaBase);
    vIndianBread.Bake();
    }
} 
//Himachalsoft.com:: my website
© . All rights reserved.