<设计模式2>抽象工厂模式

来源:互联网 发布:视频图像分析算法 编辑:程序博客网 时间:2024/06/05 00:40

抽象工厂模式,顾名思义,也是工厂模式中的一种。与之前不同的是,它多了一个接口,所有的工厂类继承这个接口来进行具体操作,显而易见,这样扩展性更好,修改的时候不需要修改之前的代码,重新创建即可。


方法也和之前的差不多,这里先贴出与之前相同的部分:

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,通过这两个工厂类再继续构造出不同的人种,这就是抽象工厂与普通工厂方法的不同。当然普通工厂也可以实现,但是会更加复杂。

普通工厂模式侧重的应该是一个工厂类创建多个产品,而抽象工厂模式是多个工厂类各自生产一个具体的产品。

简单点来看可能是一到多和多到一的区别。

当然这些可能都只是表象,具体的研究下次遇到问题的时候再回顾分析。

0 0
原创粉丝点击