每天一学设计模式之抽象工厂模式

 不好意思,昨天没有来得及学习,今天补上抽象工厂模式。

 抽象工厂方法,是一种比较常用的模式。

 Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。)

 抽象工厂模式的通用类图:

下面来看一下抽象工厂模式的通用代码:

抽象产品类:

public abstract class AbstractProductA{
      //通用方法
      public void shareMethod(){
          ...
      } 
      //相同方法,不同处理实现
      public abstract void doSomething();
}
具体产品类A1:

public class ProductA1 extends AbstractProductA{
      //相同方法,不同处理实现
      public void doSomething(){
          System.out.println("产品A1...");
      }
 }

具体产品类A2:

public class ProductA2 extends AbstractProductA{
      //相同方法,不同处理实现
      public abstract void doSomething(){
          System.out.println("产品A2...");
      }
 }
可以像A类产品一样实现多个这样子的产品类,这里我们假设再实现了一个同样的B类产品类。我们再来看一下抽象工厂类的代码:

public abstract class AbstractFactory{
      //生产A类产品,具体生产A1类产品还是A2类产品,在具体的工厂实现类中实现...
       public abstract AbstractProductA createProductA();
      //生产B类产品
      public abstract AbstractProductB createProductB();    
}
在抽象工厂类中根据产品类型的个数来定义产品生产线的个数。再来看一下具体的工厂实现类:

public class Factory1 extends AbstractFactory{
      //生产A1类产品,具体生产A1类产品还是A2类产品,在具体的工厂实现类中实现...
       public AbstractProductA createProductA(){ return new ProductA1();}
      //生产B2类产品
      public AbstractProductB createProductB(){ return new ProductB2();};    
}
在这里可以根据需求实现具体工厂类,可以任意组合不同类型产品的不同类型实现。下面来看一下抽象工厂模式的优缺点:

优点:

     1.封装性,我们不需要去关注产品的实现,只需要去关注一下工厂类,关注工厂类可以生产怎么样的产品就可以了。

      2.产品类族之间的约束为非公开状态。产品A与产品B直接有什么样的约束关联,在工厂类中我们并不关注,即上层模块不用关心底层的实现和关联。

缺点:

     产品族扩展非常复杂。例如需要增加一个C产品,上述的代码需要修改的工作量会很大,更加复杂的场景就会带来更加巨大的工作量。

抽象工厂模式的试用场景:

  


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值