场景:文具生产
场景描述:生产笔,包。
笔与包是两种产品,而且是不具备相同接口的产品。而笔分钢笔,铅笔等,可以抽象为笔,所以虽然钢笔,铅笔在意义上是两种产品,但因为抽象为笔这种类型,所以还是算一种类型。
而笔与包不具备可比性,所以为两类产品或叫做一系列产品。
(一)笔
public abstract class Pen
{
public abstract void ShowMessage();
}
(二)包
public abstract class Bag
{
public abstract void ShowMessage();
}
(三)中国制造的笔
public class ChinesePen : Pen
{
public override void ShowMessage()
{
Console.WriteLine("Made in
}
}
(四)中国制造的包
public class ChineseBag : Bag
{
public override void ShowMessage()
{
Console.WriteLine("Made in
}
}
(五)工厂
可以生产笔,又可以生产包
public interface IFactory
{
Bag CreateBag();
Pen CreatePen();
}
(六)中国的工厂
用来生产中国的产品!
可以生产中国的笔,中国的包
public class ChineseFactory:IFactory
{
#region IFactory 成员
public Bag CreateBag()
{
return new ChineseBag();
}
public Pen CreatePen()
{
return new ChinesePen();
}
#endregion
}
(七)测试
[Test]
public void TestAbstractFac()
{
DFactory.AbstractFactory.IFactory fac = new ChineseFactory();
Bag bb = fac.CreateBag();
bb.ShowMessage();
Pen pp = fac.CreatePen();
pp.ShowMessage();
}
结果:
Bag Made in
Pen Made in
(八)外国的工厂也可以生产这一系列的产品
public class EnglishBag : Bag
{
public override void ShowMessage()
{
Console.WriteLine("Bag Made in
}
}
public class EnglishPen : Pen
{
public override void ShowMessage()
{
Console.WriteLine("Pen Made in
}
}
public class EnglishFactory:IFactory
{
#region IFactory 成员
public Bag CreateBag()
{
return new EnglishBag();
}
public Pen CreatePen()
{
return new EnglishPen();
}
#endregion
}
(九)更换产品系列
[Test]
public void TestAbstractFac()
{
//DFactory.AbstractFactory.IFactory fac = new ChineseFactory();
DFactory.AbstractFactory.IFactory fac = new EnglishFactory();