现在的位置: 首页 > 综合 > 正文

模式实例之——抽象工厂实例

2012年10月11日 ⁄ 综合 ⁄ 共 1836字 ⁄ 字号 评论关闭

场景:文具生产

 

场景描述:生产笔,包。

笔与包是两种产品,而且是不具备相同接口的产品。而笔分钢笔,铅笔等,可以抽象为笔,所以虽然钢笔,铅笔在意义上是两种产品,但因为抽象为笔这种类型,所以还是算一种类型。

而笔与包不具备可比性,所以为两类产品或叫做一系列产品。

 

(一)笔

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 China!");

        }

    }

(四)中国制造的包

public class ChineseBag : Bag

    {

        public override void ShowMessage()

        {

            Console.WriteLine("Made in China!");

        }

    }

(五)工厂

可以生产笔,又可以生产包

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 China!

Pen Made in China!

 

(八)外国的工厂也可以生产这一系列的产品

public class EnglishBag : Bag

    {

        public override void ShowMessage()

        {

            Console.WriteLine("Bag Made in England!");

        }

}

 

public class EnglishPen : Pen

    {

        public override void ShowMessage()

        {

            Console.WriteLine("Pen Made in England!");

        }

}

 

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();

   

抱歉!评论已关闭.