抽象工厂模式

          上次讲解了简单工厂模式与工厂方法模式的区别,这次又学习了一种抽象工厂模式,我觉得也可以跟他们进行联系起来。这次就来讲解抽象工厂模式与他们的区别。

        上次说了从简单工厂模式到工厂方法模式的转换,这次看一下从工厂方法模式到抽象工厂模式的过渡。

抽象工厂模式:提供一个创建一系列相关或想相互依赖对象的接口而无需制定它们具体的类。与方法工厂模式非常的相似,只不过方法工厂模式只是限于一个产品族,而抽象工厂方法模式涉及到多个产品族。

        举例:工厂方法模式:有两家公司同时生产轿车,在这里“轿车”就是“抽象产品类”,具体的产品就是“现在,丰田”。工厂抽象接口就是“公司”,具体的工厂就是“现在汽车集团,丰田汽车公司”。代码结构:

        

              代码显示:        

    //轿车类
    public class Car
    {
        public virtual void Show()
        {
            Console.WriteLine(" ");
        }
   //具体轿车类
    class XiandaiCar:Car
    {
        public override void Show()
        {
            Console.WriteLine("在现在汽车集团制造现代牌轿车 ");
        }
}
class FengtianCar : Car
    {
        public override void Show()
        {
            Console.WriteLine("在丰田汽车公司制造丰田牌轿车 ");
        }
}
    //公司接口
    interface Company
    {
        Car CreateCar();
}
    //现代汽车公司工厂
    class XiandaiCompanyFactory:Company
    {
        public Car CreateCar()
        {
            return new XiandaiCar();
        }
}
 //丰田汽车公司工厂
    class FengtianCompanyFactory:Company
    {
        public Car CreateCar()
        {
             return new FengtianCar();
        }
    }

客户端代码:

        static void Main(string[] args)
        {
            Company company = new XiandaiCompanyFactory();
            Car xd = company.CreateCar();
            xd.Show();
Console.ReadLine();
        }
结果显示:

                 
          

          抽象工厂模式举例:如果这两个公司不止生产轿车还生产货车,这时候就用抽象工厂模式。代码结构图:

          

  代码显示:

    //轿车类
    public class Car
    {
        public virtual void Show()
        {
            Console.WriteLine(" ");
        }
}
    //货车类
    public  class Truck
    {
        public virtual void Show()
        {
            Console.WriteLine(" ");
        }
    }
//具体轿车类
    class XiandaiCar:Car
    {
        public override void Show()
        {
            Console.WriteLine("在现在汽车集团制造现代牌轿车 ");
        }
}
class FengtianCar : Car
    {
        public override void Show()
        {
            Console.WriteLine("在丰田汽车公司制造丰田牌轿车 ");
        }
}
 //具体货车类
    class XiandaiTruck:Truck 
    {
               
        public override void Show()
        {
            Console.WriteLine("在现在汽车集团制造现代牌货车 ");
        }
}
class FengtianTruck : Truck 
    {
        public override void Show()
        {
            Console.WriteLine("在丰田汽车公司制造丰田牌货车 ");
        }
客户端代码:

        static void Main(string[] args)
        {
            Company company = new XiandaiCompanyFactory();
            Car xd = company.CreateCar();
            Truck xdc = company.CreateTruck();
            xd.Show();
            xdc.Show();

            Console.ReadLine();
        }
结果显示:

         

         从上例可以看出,抽象工厂模式比工厂方法模式多了一个产品族(货车),所以工厂方法模式用于生产一个产品族,而抽象工厂模式用于生产多个产品族(产品系列)的时候。

    总结:抽象工厂模式:用于生产不用产品族(产品系列)的全部产品。对于增加新的产品不利于扩展,但是支持增加多个产品族。





 


 


 

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值