设计模式C#合集--抽象工厂模式

抽象工厂,名字就告诉你是抽象的了。上代码。

    public interface BMW
    {

        public void Drive();
    }

    public class BMW730 : BMW
    {

        public override void Drive()
        {
            Console.WriteLine("BMW 730 Run");
        }
    }

    public class BMWX6 : BMW
    {

        public override void Drive()
        {
            Console.WriteLine("BMW X6 Run");
        }
    }

    public interface Porsche
    {
        public void Drive();
    }

    public class PorscheMacan : Porsche
    {
        public override void Drive()
        {
            Console.WriteLine("Porsche Macan");
        }
    }

    public class PorschePanamera : Porsche
    {
        public override void Drive()
        {
            Console.WriteLine("Porsche Panamera");
        }
    }

  似乎之前的打招呼不够用了,我们就弄了一堆车吧。首先有两个接口:宝马和保时捷,宝马和保时捷又有具体车型。

  

  工厂的代码:

    public interface IFactory
    {
        public BMW CreatorBMW();

        public Porsche CreatorPorsche();
    }

    public class SUVFactory : IFactory
    {
        public override BMW CreatorBMW()
        {
            return new BMWX6();
        }

        public override Porsche CreatorPorsche()
        {
            return new PorscheMacan();
        }
    }

    public class CarFactory : IFactory
    {
        public override BMW CreatorBMW()
        {
            return new BMW730();
        }

        public override Porsche CreatorPorsche()
        {
            return new PorschePanamera();
        }
    }

  首先接口IFactory提供了两个方法,一个是产生宝马,一个是产生保时捷,两个实现类SUVFactory、CarFactory中实现了两个方法,为什么采用这种构造呢?因为到BMW730、BMWX6、PorscheMacan、PorschePanamera这四个是具体的类,他们可以分类,我采用了车型的分类,BMW730和PorschePanamera属于轿车,而PorscheMacan、BMWX6属于SUV,对应的工厂类也就生成对应的车,当然,也可以按照牌子分,比如生成BMWFactory工厂类,实例化属于BMW的对象,或者按价格分,相对贵的,相对便宜的等等。总而言之,分类的规则是由接口IFactory确定的。所以抽象工厂的局限性也就出来了。

posted on 2017-01-05 16:23  TIEDPAG  阅读(125)  评论(0编辑  收藏  举报

导航