C# 设计模式——抽象工厂模式(AbstractFactory)

304 阅读1分钟
   抽象工厂(AbstractFactory)模式:提供一个创建【产品族】的接口,其每个子类可以生产一系列相关的产品。
   【产品族】是这个模式的灵魂,也是和建造者模式最大的区别。
using System;
namespace AbstractFactory
{


    /*产品*/
    public abstract class Phone {
        public abstract void design();
    }
    public abstract class Pad {
        public abstract void design();
    }

    /*生产产品的工厂*/
    public abstract class Efactory
    {
        public abstract Phone createPhone();
        public abstract Pad createPad();

    }

    /*米家*/
    public class MiFactory : Efactory
    {

        public override Pad createPad()
        {
            return new Mipad();
        }

        public override Phone createPhone()
        {
            return new Miphone();
        }

    }
    /*苹果家*/
    public class IFactory : Efactory
    {
        public override Pad createPad()
        {
            return new Ipad();
        }

        public override Phone createPhone()
        {
            return new Iphone();
        }

    }
    
    public class  Company
    {

        public  void create(Efactory factory)
        {
            factory.createPhone().design();
            factory.createPad().design();
        }
    }


    /*米家产品*/
    public class Miphone : Phone
    {
        public override void design()
        {
            Console.WriteLine("我是小米手机");
        }
    }
    public class Mipad : Pad
    {
        public override void design()
        {
            Console.WriteLine("我是小米平板");
        }
    }
    /*苹果家产品*/
    public class Iphone : Phone
    {
        public override void design()
        {
            Console.WriteLine("我是苹果手机");
        }
    }
    public class Ipad : Pad
    {
        public override void design()
        {
            Console.WriteLine("我是苹果平板");
        }
    }

    public class Test {

        static void Main(string[] args){
            //我想要米家全家桶【产品族】
            Efactory miFactory = new MiFactory();
            Company company = new Company();
            //放了谁的工厂,公司就生产谁家的产品。
            company.create(miFactory);
       
        }
    }
}