设计模式——简单工厂的理解

世间本没有模式,只是programer用多了,便成就了各种模式。


    这些天,开始慢慢的接触一些新模式和复习一些常用的模式 ,那就从简单工厂开始吧。

    1.简单工厂的定义

定义一个用于创建对象的接口,让子类决定实例化哪个类,Factory Method使一个类的实例化延迟到其子类中。

参与者有:IProduct 产品接口,ProductA和ProductB......实现IProduct接口的类,Creator提供了FactoryMethod,FactoryMethod决定实现哪个类(ProductA或B,或者其他的)。

不想说那么多了 ,还是直接用个通俗的例子来说吧。

  eg:我们要实现这么一个功能,就是你坐飞机时候,空姐向您询问需要什么喝的,然后你只需要给空姐说明你需要的饮品名称,然后由空姐把你需要的饮品端过来。

    首先,由于问你之前,是不知道你需要什么饮品的,所以有个IDrink接口

namespace 简单工厂
{
//提供饮品
interface IDrink
{
string GetDrink();
}
}

然后,我们得有具体的饮品,比如说橘子汁,苹果汁等等

 class ProductApple:IDrink
{

public string GetDrink()
{
return "我是苹果汁";
}
}
 class ProductOrange:IDrink
{
public string GetDrink()
{
return "我是橘子汁";
}
}
 class ProductDefault:IDrink
{
public string GetDrink()
{
return "抱歉,没有您需要的";
}
}

这些类都是继承了IDrink接口来实现的。

这时候我们不能少了空姐来为您服务啊:

class Creator
{
public IDrink FactoryMethod(string fruitName)
{
switch (fruitName)
{
case "橘子汁":
return new ProductOrange();
case "苹果汁":
return new ProductApple();
default:
return new ProductDefault();
}
}
}

待一切就绪后,你就可以让空姐为你服务了:

class Program
{
static void Main(string[] args)
{
string drinkName = Console.ReadLine();
Creator creator = new Creator();
IDrink drink = creator.FactoryMethod(drinkName);
Console.WriteLine(drink.GetDrink());
Console.ReadLine();
}
}

以上就是简单工厂的一些理解。






 

posted @ 2011-11-27 21:46  cuitsl  阅读(199)  评论(1编辑  收藏  举报
友情博客:大熊的外星球