抽象工厂模式
1 抽象工厂模式和工厂模式有相同的地方,有多出来的地方。相同的是他们的主要目的是获得产品,以及使用该产品的方法。不同的是,抽象工厂模式在抽象出产品的基础上,再抽象出工厂。这使得调用者可以很方便的得到他要的产品和产品的特性。但是缺点也很大,管理工厂需要耗费很多精力,整个结构显得比较庞大,臃肿。需要熟练这种模式才能比较好的运用和理解。
2 抽象工厂是多个工厂共同作业下的,为了不熟悉工厂内部结构的人能够方便使用,所产生的设计结构。
3 判断是哪个工厂和产品,可以用枚举来作为参数判断。
public abstract class AbstractFactory
{
public virtual IToy GetToy(string name) { return null; }
public virtual GiftBox GetBox(string color) { return null; }
}
public interface IToy
{
int SellPrice();
}
public interface GiftBox
{
string GetColor();
}
public class PinkGiftBox : GiftBox
{
public string GetColor()
{
return "Pink";
}
}
public class RedGiftBox : GiftBox
{
public string GetColor()
{
return "Red";
}
}
public class GiftBoxFactory : AbstractFactory
{
public override GiftBox GetBox(string color)
{
if (color == "Red")
{
return new RedGiftBox();
}
else if (color == "Pink")
{
return new PinkGiftBox();
}
else
{
return null;
}
}
}
public class Snoopy : IToy
{
public int SellPrice()
{
return 8;
}
}
public class Mickey : IToy
{
public int SellPrice()
{
return 10;
}
}
public class ToyFactory : AbstractFactory
{
public override IToy GetToy(string name)
{
if(name == "Mickey")
{
return new Mickey();
}else if(name == "Snoopy")
{
return new Snoopy();
}
else
{
return null;
}
}
}
public class FactoryProducer
{
public static AbstractFactory GetFactory(string name)
{
if (name == "Gift")
{
return new GiftBoxFactory();
}
else if (name == "Toy")
{
return new ToyFactory();
}
else
{
return null;
}
}
}
public class BussinessMan
{
public static int GetToyPrice(string factoryName,string toyName)
{
AbstractFactory factory = FactoryProducer.GetFactory(factoryName);
IToy toy = factory.GetToy(toyName);
return toy.SellPrice();
}
public static string GetBoxColor(string factoryName, string color)
{
AbstractFactory factory = FactoryProducer.GetFactory(factoryName);
GiftBox box = factory.GetBox(color);
return box.GetColor();
}
}
本文深入探讨了抽象工厂模式,对比工厂模式,详细解释了抽象工厂模式的原理和应用。通过具体代码实例,展示了如何创建产品及其特性,以及如何通过枚举参数判断工厂和产品类型。适合希望深入了解设计模式的开发者阅读。
2227

被折叠的 条评论
为什么被折叠?



