IT@程序员猿媛一步一坑

设计模式- 抽象工厂(Abstract Factory)

2019-04-24  本文已影响4人  易兒善

定义

抽象工厂(Abstract Factory)模式意图:为创建一组相关或相互依赖对象提供了一个接口,而且无需指定它们的具体类

抽象工厂可以向客户提供一个接口,是客户可以在不必指定产品具体类型的情况下,创建多个产品家族中的产品对象,它强调的系列对象的变化。

C#例子

    public abstract class Product
    {
        public abstract string GetName(ProductType productType);
    }
    public abstract class ProductType
    {
        public abstract string GetProductType();
    }

    public class ProductA : Product
    {
        public override string GetName(ProductType productType)
        {
            return "我是A产品,型号是"+productType.GetProductType();
        }
    }
    public class ProductB : Product
    {
        public override string GetName(ProductType productType)
        {
            return "我是B产品,型号是"+productType.GetProductType();
        }
    }
    public class ProductType1 : ProductType
    {
        public override string GetProductType()
        {
            return "1";
        }
    }
    public class ProductType2 : ProductType
    {
        public override string GetProductType()
        {
            return "2";
        }
    }

public abstract class Factory
    {
        public abstract Product CreateProduct();

        public abstract ProductType CreateProductType();
    }

    public class FactoryA1 : Factory
    {
        public override Product CreateProduct()
        {
            return new ProductA();
        }

        public override ProductType CreateProductType()
        {
            return new ProductType1();
        }
    }
    public class FactoryB2 : Factory
    {
        public override Product CreateProduct()
        {
            return new ProductB();
        }

        public override ProductType CreateProductType()
        {
            return new ProductType2();
        }
    }
    public class Client
    {
        private Product _product;
        private ProductType _productType;

        public Client(Factory factory)
        {
            _product = factory.CreateProduct();
            _productType = factory.CreateProductType();
        }

        public void Run()
        {
            Console.WriteLine(_product.GetName(_productType));
        }
    }
        static void Main(string[] args)
        {
            var client1 = new Client(new FactoryA1());
            client1.Run();
            var client2 = new Client(new FactoryB2());
            client2.Run();
            Console.ReadLine();
        }

抽象工厂模式参与者:

抽象工厂模式适用情形

抽象工厂模式的特点

其他

抽象工厂模式与工厂方法模式区别(产品个数)

源码地址

dotnet-design-patterns

其他设计模式

23种设计模式

上一篇 下一篇

猜你喜欢

热点阅读