设计模式之abstract factory篇(例子)

  
Design Pattern II: Abstract Factory
举例:

有BMW和BENZ两家汽车工厂,他们都生产Wheel,Body,Engine。只不过生产出来的一个叫BMWWheel, BMWBody, BMWEngine, 另外一个叫BENZWheel, BENZBody, BENZEngine.
同时,有一个代工的公司C,同时接到了这两家厂的Outsourcing项目,BMW和BENZ对C说,我们把轮子,车身和引擎给你,你给我装配出整车来。(虽然没啥技术含量,但外包么,就是靠这个混饭吃的。。)

这里:假设不论装配什么牌子的车,装配过程都是一样的,先拿四个轮子,再拿个车身,再拿个引擎,安一块儿就好了。那么,C不需要知道到底是哪个厂来的,只需要对某一个工厂说,你给我四个轮子,一个车身,一个引擎,我给你一台整车。完事。。。

所以,抽象出来一看,C就是Client,BMWWheel,BENZBody等就是封装好的类。Client不需要知道一个类到底是那一个具体类,只需要给Client一个Abstract Factory,C从这个Abstract Factory里面拿出东西来用就可以了。

Abstract Factory Pattern有几个参与者:(Ref: Gof)
• Abstract Factory — 声明一个创建抽象产品对象的操作接口。
        CarFactory,能生产轮子车身和引擎
• Concrete Factory — 实现创建具体产品对象的操作。
        BMWFactory, BenzFactory, 生产各自不同的轮子车身和引擎。
• Abstract Product — 为一类产品对象声明一个接口。
        Wheel, Body, Engine
• Concrete Product — 定义一个将被相应的具体工厂创建的产品对象。实现Abstract Product接口。
        BMWWheel, BMWBody, BenzEngine ...
• Client — 仅使用由Abstract Factory和Abstract Product类声明的接口。
        外包公司C

PS:其实这个pattern本身与装配这件事情并没有任何关系,在Client端干什么事情并不重要,我们只是为了阐述一下在Client端并不需要具体的类,而是只需要调用Abstract Factory里面的Create方法来得到同一系列抽象的对象(Body, Engine...),并且使用它们,就可以了。

你可能感兴趣的:(设计模式之abstract factory篇(例子))