模式五:抽象工厂模式

 

5.1抽象工厂模式定义:

   抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

 

5.2抽象工厂模式UML类图:

 

 

 

 

5.3应用场景

当我们有一系列的对象而不是单个对象可能变化时,例如:如果我们生产一台笔记本电脑和一台普通的PC机,其所用的原料如显卡、声卡虽然名称都一样,但是很明显,其真实的材料却是肯定不一样的。这时,如果我们由一家生产笔记本电脑的厂商转换成普通PC 机的厂商,那么这意味着具体显卡、声卡、显示屏等一系列对象的变化,这时,我们就可以采用抽象工厂模式。

 

5.4抽象工厂模式分析与实现(c#描述)

//A产品接口

        public interface IProductA

        {

            void ProductBehavior1();

            void ProductBehavior2();

        }

 

        //A产品实现类A1

        public class ProductA1 : IProductA

        {

            public void ProductBehavior1()

            {

                Console.WriteLine("我是A1产品的行为1");

            }

 

            public void ProductBehavior2()

            {

                Console.WriteLine("我是A1产品的行为2");

            }

       

        }

 

        //A产品实现类A2

        public class ProductA2 : IProductA

        {

            public void ProductBehavior1()

            {

                Console.WriteLine("我是A2产品的行为1");

            }

 

            public void ProductBehavior2()

            {

                Console.WriteLine("我是A2产品的行为2");

            }

 

        }

 

        //B产品接口

        public interface IProductB

        {

            void ProductBehavior1();

            void ProductBehavior2();

        }

 

        //B产品实现类B1

        public class ProductB1 : IProductB

        {

            public void ProductBehavior1()

            {

                Console.WriteLine("我是B1产品的行为1");

            }

 

            public void ProductBehavior2()

            {

                Console.WriteLine("我是B1产品的行为2");

            }

 

        }

 

        //B产品实现类B2

        public class ProductB2 : IProductB

        {

            public void ProductBehavior1()

            {

                Console.WriteLine("我是B2产品的行为1");

            }

 

            public void ProductBehavior2()

            {

                Console.WriteLine("我是B2产品的行为2");

            }

 

        }

 

        //抽象工厂接口

        public interface IAbstractFactory

        {

            //工厂方法只制造一个产品,则抽象工厂则制造一系列产品,这是两者之间的不同。

            //这里实际上就相当于工厂方法的集合。

            IProductA CreateProductA();

            IProductB CreateProductB();           

        }

 

        //抽象工厂实现类1

        public class AbstractFactory1 : IAbstractFactory

        {

            //A1B1是一个系列

            public IProductA CreateProductA()

            {

              return new ProductA1();

            }

 

            public IProductB CreateProductB()

            {

                return new ProductB1();

            }

       

        }

 

        //抽象工厂实现类2

        public class AbstractFactory2 : IAbstractFactory

        {

            //A2B2是一个系列

            public IProductA CreateProductA()

            {

                return new ProductA2();

            }

 

            public IProductB CreateProductB()

            {

                return new ProductB2();

            }

 

        }

 

        //调用类

        public class AbstractFactory_Test

        {

            public static void Do()

            {

                IAbstractFactory lobj_AbstractFactory = new AbstractFactory1();//AbstractFactory1工厂用来创建A1B1两个对象。

lobj_AbstractFactory.CreateProductA();

                lobj_AbstractFactory.CreateProductB();

lobj_AbstractFactory = new AbstractFactory2();//AbstractFactory2工厂用来创建A2B2两个对象。

lobj_AbstractFactory.CreateProductA();

                lobj_AbstractFactory.CreateProductB();

                //总结:子类的多个工厂方法封装了产品类的创建过程,即封装了产品的实现。如果增加产品或改变产品时,此处的客户端代码不受影响。

            }

   }

 

抽象工厂和工厂方法很类似,都是将具体类的实例化交给子类实现,而客户只依赖于其上层的抽象,即:IAbstractFactory。然而,两者之间的不同是:工厂方法模式解决单个对象可能变化的问题,而抽象工厂则解决一系列对象可能的变化。实际上,抽象工厂完全可以看作是带有N 个工厂方法的集合。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值