抽象工厂模式

来源:互联网 发布:1920淘宝全屏轮播海报 编辑:程序博客网 时间:2024/05/16 12:42

       一开始学习抽象工厂模式,看到抽象那两个字我们觉得就抽象,我一看它就看不下去。其实认真对比下三个抽象工厂,原来他们基本一样,就改动了一小点。我们可以根据实现加减乘除这四个数学运算进行讨论。

在没有学习封装,继承,代码复用这些理论知识时,我们一般不会写出简单工厂模式的代码。而是写出一个类,把所有的判断都写进去,然后根据判断来选择哪个数学运算。

所以说简单工厂:实现了继承,封装,代码复用。它把四个运算分写类,修改哪个方法只修改相应的类。把分支判断单独的放到另一个类中。这样四个运算类都相互独立,唯一有联系的就是那个判断类。这样整个代码的结构清晰,代码量也少了很多。


        进一步抽象,继续往下走,分支判断是很麻烦的,而且有好多重复的语句。在写代码应尽量避免这些判断。于是乎工厂方法就出现了。


        在工厂方法中:我们把判断给了客户端,这个判断不是大量的判断语句。而是一个简单的变量。客户端什么也不用想,只要你把你的变量拿出来,我就给你正确的结果。那么我们接受这个变量的容器是什么呢,就是类,每个变量都有自己的类,相互独立,互不影响。当然这也是个缺点,如果变量太多的话,那么类也就多了。有了接收这个变量的容器,那么具体的加减乘除的算法在哪里呢?别急,我们也是相同的创建了相同数目的算法类。这样具体的算法只和我们的变量容器类相连。而且一对一,互不影响。如果多了算法,直接添加就是,完全不用修改。所以说:工厂方法是简单工厂的抽象,他把判断放在了客户端,而且这个判断仅仅是一个变量。而且判断的结果也分别封装为一个类。这样的代码结构要比简单工厂好了不少。


跟我走,来看下抽象工厂,仔细观察抽象工厂和工厂方法,发现他们其实是一样的。唯一的不同就是一个是接口,一个是抽象类。看类图:


     看定义:工厂方法模式是创建一个具体的类,来提供很多的接口,这个接口的实现到子类的身上实现。也就是说有个接口的实现通过了继承来实现。

      抽象工厂模式:提供了一个接口,这个接口为众多类来实现。也就是说工厂方法里的抽象类变为了接口。我本以为就这么点区别呢,通过师父的讲解,原来还有好多区别等着我去理解呢。持续学习中。




0 0
原创粉丝点击