抽象工厂模式,顾名思义,也是工厂模式中的一种。与之前不同的是,它多了一个接口,所有的工厂类继承这个接口来进行具体操作,显而易见,这样扩展性更好,修改的时候不需要修改之前的代码,重新创建即可。
方法也和之前的差不多,这里先贴出与之前相同的部分:
public interface IOperator {
public void operate();
}
public class OperateFirst implements IOperator {
public void operate() {
System.out.println("OperateFirst");
}
}
public class OperateSecond implements IOperator {
public void operate() {
System.out.println("OperateSecond");
}
}
仍然是创建一个接口,然后实现这个方法,接下来便是不同之处。创建一个新的接口,让工厂类继承此接口:
public interface IProvider {
public IOperator produce();
}
public class OperatorFirstFactory implements IProvider{
public IOperator produce() {
return new OperateFirst();
}
}
public class OperatorSecondFactory implements IProvider{
public IOperator produce() {
return new OperateSecond();
}
}
代码测试:
public class AbstractFactoryTest {
public static void main(String[] args) {
IProvider provder = new OperatorFirstFactory();
IOperator operator = provder.produce();
operator.operate();
}
}
看起来是差不多,但是结构更加清晰。
第一次回顾:
刚刚看了一下之前写的实在潦草,完全没领会用意。看了相关博客和资料,重新理解了下抽象工厂和普通工厂的区别。
普通工厂模式是为了创建一个单一的对象,而抽象工厂模式则侧重于创建多个工厂类,多个功能相似但又具体不同的工厂类再来具体生产产品。
比如android中的bitmap是普通工厂方法,这些方法都创建出一个bitmap类,而当我们需求是创建人,但是人又分男人、女人,男人、女人又各自有不同种族、发色等各个不同属性。这时候如果只是一个普通工厂类来创建的话可能是非常复杂,虽说这些都是人但是却有着不同属性。这时候,我们可以把他们共同点抽象出来,创建出多个抽象工厂类:ManFactory、WomanFactory,通过这两个工厂类再继续构造出不同的人种,这就是抽象工厂与普通工厂方法的不同。当然普通工厂也可以实现,但是会更加复杂。
普通工厂模式侧重的应该是一个工厂类创建多个产品,而抽象工厂模式是多个工厂类各自生产一个具体的产品。
简单点来看可能是一到多和多到一的区别。
当然这些可能都只是表象,具体的研究下次遇到问题的时候再回顾分析。