using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/**
* 抽象工厂
* http://www.cnblogs.com/zhili/p/AbstractFactory.html
* ***/
namespace AbstractFactoryPatternDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("AbstractFactoryPatternDemo");
AbstractFactory beijingFac = new BeijingFactory();
AbstractFactory hebeiFac = new HebeiFactory();
AbstractYabo bjYabo = beijingFac.MakeYabo();
bjYabo.Show();
AbstractYabo hbYabo = hebeiFac.MakeYabo();
hbYabo.Show();
AbstractYajia bjYajia = beijingFac.MakeYajia();
bjYajia.Show();
AbstractYajia hbYajia = hebeiFac.MakeYajia();
hbYajia.Show();
Console.Read();
}
}
abstract class AbstractYabo
{
public abstract void Show();
}
abstract class AbstractYajia
{
public abstract void Show();
}
class BeijingYabo : AbstractYabo
{
public override void Show()
{
Console.WriteLine("我是北京鸭脖");
}
}
class BeijingYajia : AbstractYajia
{
public override void Show()
{
Console.WriteLine("我是北京鸭架");
}
}
class HebeiYabo : AbstractYabo
{
public override void Show()
{
Console.WriteLine("我是河北鸭脖");
}
}
class HebeiYajia : AbstractYajia
{
public override void Show()
{
Console.WriteLine("我是河北鸭架");
}
}
abstract class AbstractFactory
{
public abstract AbstractYabo MakeYabo();
public abstract AbstractYajia MakeYajia();
}
class BeijingFactory : AbstractFactory
{
public override AbstractYabo MakeYabo()
{
Console.WriteLine("制作北京鸭脖");
return new BeijingYabo();
}
public override AbstractYajia MakeYajia()
{
Console.WriteLine("制作北京鸭架");
return new BeijingYajia();
}
}
class HebeiFactory : AbstractFactory
{
public override AbstractYabo MakeYabo()
{
Console.WriteLine("制作河北鸭脖");
return new HebeiYabo();
}
public override AbstractYajia MakeYajia()
{
Console.WriteLine("制作河北鸭架");
return new HebeiYajia();
}
}
}