【抽象工厂模式应用场景举例】
写到抽象工厂模式了,我深知“抽象工厂模式”博文会带来一点点高潮,因为程序员对工厂模式中的“抽象工厂”都是比较感冒的,而且关注也很多,我就尽量用我所能理解的那么点程度来给大家介绍这个模式,如果有更好的比喻还请网友指正,先感谢了!
设计模式-快餐简解-【工厂方法模式】
介绍了工厂方法的使用,从那个程序中可以看到,奥迪audi车是从audi_car_factory_imple工厂中创建出来的,而大众3W车是从threeW_car_factory_imple工厂中创建出来的,那么如果这2家汽车生产大厂由总部在北京市,现在发展到上海,深圳等城市创建生气汽车的分厂,该怎么办?是不是得将原来的奥迪汽车工厂类:
public
class
audi_car_factory_imple
implements
Icar_factory {
public
Icar_interface create_car() {
car_audi_imple car_audi_imple_ref
=
new
car_audi_imple();
car_audi_imple_ref.setName(
"
奥迪A6
"
);
car_audi_imple_ref.setSpeed(
300
);
return
car_audi_imple_ref;
}
}
改成类似如下的模样:
public
class
audi_car_factory_imple
implements
Icar_factory {
public
Icar_interface create_car(String area_car) {
if
(area_car.equals(
"
北京
"
)){创建一个北京的奥迪汽车}
if
(area_car.equals(
"
上海
"
)){创建一个上海的奥迪汽车}
if
(area_car.equals(
"
深圳
"
)){创建一个深圳的奥迪汽车}
return
car_audi_imple_ref;
}
}
那么发现一个问题,不同地域的汽车却在一个工厂中出现,这是不合乎常理的,因为北京奥迪在北京分厂创建,上海奥迪在上海分厂创建,这样才对。
所以如果遇到分“大系”来创建对象的时候,抽象工厂方法是肯定要使用的时候了。这里的大系指的就是从地域上来分。
这个例子就应该以“用抽象工厂来定义具体工厂的抽象,而由具体工厂来创建对象”
比如在玩“极品飞车”这款游戏,每个地图处都有造车的工厂,每个造车的工厂都因为有造车的档次不同而划分为高级车厂,低级车厂,那么这样的场景正是应用抽象工厂的好时机,再来理解一下这句话“用抽象工厂来定义具体工厂的抽象,而由具体工厂来创建对象”,用抽象造车工厂来定义具体造车工厂的抽象,而由具体的造车工厂来创建汽车,这就是抽象工厂与工厂方法的不同,工厂方法中对象的创建是由工厂方法来确定的,创建的对象都是不分类并且实现一个接口的,而抽象工厂就是在工厂方法的基础上对创建车的对象的行为进行分类,比如北京车厂,上海车厂等。