码迷,mamicode.com
首页 > 其他好文 > 详细

抽象工厂模式(Abstract Factory)

时间:2018-01-24 19:56:28      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:cond   继承   post   idea   app   console   type   模式   one   

模式定义

抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
分析:抽象工厂模式中的工厂类负责创建多种相关产品,工厂模式中的工厂类只负责创建一种产品。
关联定义
产品等级结构: 继承于同一抽象类的产品
产品族: 由同一工厂类生产的产品

UML类图

技术分享图片

? AbstractFactory:抽象工厂
? ConcreteFactory:具体工厂
? AbstractProduct:抽象产品
? Product:具体产品

代码结构

    public static class AbstractFactoryAPP
    {
        public static void Run()
        {
            AbstractFactory factory1 = new ConcreteFactory1();
            AbstractProductA productA1 = factory1.CreateProductA();
            AbstractProductB productB1 = factory1.CreateProductB();
            productB1.Interact(productA1);
        }
    }

    public abstract class AbstractProductA
    { }

    public class ProductA1 : AbstractProductA
    { }

    public class ProductA2 : AbstractProductA
    { }

    public abstract class AbstractProductB
    {
        public abstract void Interact(AbstractProductA a);
    }

    public class ProductB1 : AbstractProductB
    {
        public override void Interact(AbstractProductA a)
        {
            Console.WriteLine(this.GetType().Name + " interacts with " + a.GetType().Name);
        }
    }

    public class ProductB2 : AbstractProductB
    {
        public override void Interact(AbstractProductA a)
        {
            Console.WriteLine(this.GetType().Name + " interacts with " + a.GetType().Name);
        }
    }

    public abstract class AbstractFactory
    {
        public abstract AbstractProductA CreateProductA();
        public abstract AbstractProductB CreateProductB();
    }

    public class ConcreteFactory1:AbstractFactory
    {
        public override AbstractProductA CreateProductA()
        {
            return new ProductA1();
        }
        public override AbstractProductB CreateProductB()
        {
            return new ProductB1();
        }
    }
    public class ConcreteFactory2 : AbstractFactory
    {
        public override AbstractProductA CreateProductA()
        {
            return new ProductA2();
        }
        public override AbstractProductB CreateProductB()
        {
            return new ProductB2();
        }
    }

情景案例

现在好多公司都在做自己的生态圈,好像只要利润的产品都生产(比如做手机的非要造汽车)。本例子举海尔与美的两家电器商,海尔与美的都生产冰箱与空调。冰箱、空调为抽象产品,海尔、美的为两个具体工厂。

    public static class AbstractFactoryAPP
    {
        public static void Run()
        {
            Company haier = new HaierCompany();
            AirConditioner productA1 = haier.CreateProductA();
            Refrigerator productB1 = haier.CreateProductB();
            productB1.Interact(productA1);
        }
    }

    public abstract class AirConditioner
    { }

    public class HaierAir : AirConditioner
    { }

    public class MideaAir : AirConditioner
    { }

    public abstract class Refrigerator
    {
        public abstract void Interact(AirConditioner a);
    }

    public class HaierRefrigerator : Refrigerator
    {
        public override void Interact(AirConditioner a)
        {
            Console.WriteLine(this.GetType().Name + " interacts with " + a.GetType().Name);
        }
    }

    public class MideaRefrigerator : Refrigerator
    {
        public override void Interact(AirConditioner a)
        {
            Console.WriteLine(this.GetType().Name + " interacts with " + a.GetType().Name);
        }
    }

    public abstract class Company
    {
        public abstract AirConditioner CreateProductA();
        public abstract Refrigerator CreateProductB();
    }

    public class HaierCompany : Company
    {
        public override AirConditioner CreateProductA()
        {
            return new HaierAir();
        }
        public override Refrigerator CreateProductB()
        {
            return new HaierRefrigerator();
        }
    }
    public class MediaCompany : Company
    {
        public override AirConditioner CreateProductA()
        {
            return new MideaAir();
        }
        public override Refrigerator CreateProductB()
        {
            return new MideaRefrigerator();
        }
    }

抽象工厂模式(Abstract Factory)

标签:cond   继承   post   idea   app   console   type   模式   one   

原文地址:https://www.cnblogs.com/LoveTomato/p/8342952.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!