设计模式——工厂方法模式(FactoryMethod)和抽象工厂模式(Abstract Factory)

工厂模式中有: 工厂方法(Factory Method) 抽象工厂(Abstract Factory).

      这两个模式没有很明显的区别,区别在于需要创建对象的复杂程度上。如果我们创建对象的方法变得复杂了,我们就可能要将上例中Factory变成抽象类,将共同部分封装在抽象类中,不同部分使用子类实现。

下面关于是在网络中查到关于工厂方法模式与抽象工厂模式的概述和区别:

工厂方法模式:
      一个抽象产品类,可以派生出多个具体产品类。  
      一个抽象工厂类,可以派生出多个具体工厂类。  
      每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
      多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。  
      一个抽象工厂类,可以派生出多个具体工厂类。  
      每个具体工厂类可以创建多个具体产品类的实例。   
区别:
      工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。  
      工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

抽象工厂模式相比工厂方法模式要复杂一些,这里针对抽象工厂模举例说明。如果能够理解抽象工厂模式,工厂方法模式就很easy了。

      抽象产品角色:

  public interface Creator
  {

      public ProductA factoryA();

      public ProductB factoryB();

  }

  具体工厂类1:

  public class ConcreteCreator1 implements Creator

  {

         public ProductA factoryA()

         {

                return new ProductA1();

          }

         public ProductB factoryB()

        {

               return new ProductB1();

         }

  }

  具体工厂类2:

  public class ConcreteCreator2 implements Creator

  {

        public ProductA factoryA()

       {

              return new ProductA2();

        }

        public ProductB factoryB()

       {

             return new ProductB2();

       }

  }

  抽象产品类A:

  public interface ProductA

  {

  }

  抽象产品类B:

  public interface ProductB

  {

  }

  具体产品类ProdcutA1:

  public class ProductA1 implements ProductA

  {

        public ProductA1()

       {

       }

  }

  具体产品类ProdcutA2:

  public class ProductA2 implements ProductA

  {

        public ProductA2()

       {

       }

  }

  具体产品类ProdcutB1:

  public class ProductB1 implements ProductB

  {

         public ProductB1()

         {

         }

  }

  具体产品类ProdcutB2:

  public class ProductB2 implements ProductB

  {

          public ProductB2()

         {

          }

  }

我个人理解抽象工厂模式是工厂方法模式的扩充。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值