技术开发 频道

GOF设计模式 --- 工厂模式

三、看图识字,就像小学生学东西一样来理解抽象工厂

    你只说工厂,那给我的感觉就是抽象的。因为我并不知道你说的到底是那家工厂,什么工厂等等。但是,我可以想像到在一个很大的地方,耳边传来轰轰的声音,生产线在工作的情景.......这就是抽象的工厂。

    具体的来说,生活中有很多的工厂。比如服装制造工厂,洗涤品制造工厂,汽车制造工厂...他们都是工厂。他们都有自己的产品。而且,单说服装制造工厂,就有很多家...

    服装制造工厂的产品有衣服,裤子等。洗涤品制造工厂的产品有洗衣粉,香皂等。从厂家的角度来讲,不同的厂家生产相同或不同的产品。从产品的角度来讲,同样的产品由一个厂家或者多个厂家来生产。这个结构看起来很复杂。所以,我们必须要引入抽象的概念。当一个问题很难用具体的某个实例来描述的时候,我们不妨想想引入抽象。

    首先是抽象的工厂,具体什么样的工厂有其子工厂去实现。再进一步,也有抽象的产品,具体的产品由其子产品去实现。

    举例来说。电脑生产工厂。其子工厂会有联想电脑生产工厂,IBM电脑生产工厂等等。而IBM电脑这个产品,可能也是抽象的。其子产品可以有IBM台式机,IBM笔记本电脑。

    如何具体的实现我们的抽象工厂,就要随问题的应用而定。可能世界上只有一种笔记本,可能IBM还生产汽车。没有固定的实例,只有固定的模式。

比如:

public abstract class Factory{   public abstract product1 creator();   public abstract product2 creator2(); } public class FactoryA extends Factory{   public product1 creator(){          return new product1A   }   public product2 creator2(){          return new product2A   } } public class FactoryB extends Factory{   public product1 creator(){          return new product1B   }   public product2 creator2(){          return new product2B   } }


    由此可见,工厂方法确实为系统结构提供了非常灵活强大的动态扩展机制,只要我们更换一下具体的工厂方法,系统其他地方无需一点变换,就有可能将系统功能进行改头换面的变化。

 

0
相关文章