0507: Factory Design Pattern
- Simple Factory
- Factory
- Abstract Factory
Code Sample
Simple Factory :
public static Fruit CreateFruit(string fruitType)
{
if (!String.IsNullOrEmpty(fruitType))
{
switch (fruitType)
{
case "Apple":
return new Apple();
case "Orange":
return new Orange();
case "Pear":
return new Pear();
case "Banana":
return new Banana();
}
}
return null;
}
DPSimpleFactoryFactoryAbstractFactory.SimpleFactory.FruitFactory.CreateFruit("Apple").Display(); DPSimpleFactoryFactoryAbstractFactory.SimpleFactory.FruitFactory.CreateFruit("Orange").Display(); DPSimpleFactoryFactoryAbstractFactory.SimpleFactory.FruitFactory.CreateFruit("Pear").Display();
Factory :
DPSimpleFactoryFactoryAbstractFactory.Factory.FruitFactory factory;
DPSimpleFactoryFactoryAbstractFactory.Factory.Fruit fruit;
//首先要实例化一个苹果工厂
factory = new AppleFactory();
//然后通过工厂来获得苹果类对象
fruit = factory.GetFruit();
//访问苹果类对象
fruit.Display();
//首先要实例化一个梨子工厂
factory = new PearFactory();
//然后通过工厂来获得梨子类对象
fruit = factory.GetFruit();
//访问梨子类对象
fruit.Display();
Abstract Factory :
AbstractFactory.AbstractFactory factory;
Button button;
TextBox textBox;
//Windows 下操作
factory = new WindowsFactory();
button = factory.CreateButton();
textBox = factory.CreateTextBox();
button.DisplayButton();
textBox.DisplayTextBox();
Console.WriteLine();
//Linux 下操作
factory = new LinuxFactory();
button = factory.CreateButton();
textBox = factory.CreateTextBox();
button.DisplayButton();
textBox.DisplayTextBox();
(ZT)
下面总结一下抽象工厂的优缺点
首先,抽象工厂的话,其可以更加方便的实现交换一个产品系列,
就像上面的 Demo 中可以轻易的实现从 Linux 上转换为 Windows,
同时,客户端代码中依赖的是抽象,而非具体的实现,
但是,抽象工厂也是有缺点的,其实这个缺点也很明显,那就是显得过于臃肿,上面的 Demo 尽管还只有两个产品族,类图就显得有些难看了,
如果产品族一多的话,那么总的类数是成几倍的增加,这样使整个结构变得过于复杂,类的结构也会变得更为庞大。
0 Comments:
Post a Comment
<< Home