您的位置:首页 > 其它

创建型模式之抽象工厂模式

2016-10-13 21:58 169 查看

抽象工厂模式(Abstract Factory)

为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

抽象工厂是工厂模式的升级版,他用来创建一组相关或者相互依赖的对象。来看下抽象工厂模式的类图:



类的创建依赖工厂类,程序需要扩展时,我们必须创建新的工厂类。工厂类是用来生产产品的,那我们也可以把“工厂类当成我们要生产的产品”,所以抽象工厂就是“工厂的工厂”,即生产工厂的工厂。

抽象工厂的优点:

抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联。

适用场景:

一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。

//汽车工厂
interface CarFactory {
void productCar();
}

//抽象工厂,汽车工厂的工厂
interface Provider {
CarFactory creatCarFactory();
}

//保时捷工厂
class PorscheFactory implements CarFactory {
@Override
public void productCar() {
System.out.println("生产保时捷汽车");
}
}

//拖拉机工厂
class TractorFactory implements CarFactory {
@Override
public void productCar() {
System.out.println("生产拖拉机");
}
}

//生产保时捷工厂的工厂
class SuperPorscheFactory implements Provider {
@Override
public CarFactory creatCarFactory() {
return new PorscheFactory();
}
}

//生产拖拉机工厂的工厂
class SuperTractorFactory implements Provider {
@Override
public CarFactory creatCarFactory() {
return new TractorFactory();
}
}

public class Main {

public static void main(String[] args) {
//创建一个生产保时捷工厂的工厂
Provider cf = new SuperPorscheFactory();
//生产保时捷工厂
CarFactory pf = cf.creatCarFactory();
//保时捷工厂生产保时捷汽车
pf.productCar();
//生产拖拉机
Provider tf = new SuperTractorFactory();
CarFactory tff = tf.creatCarFactory();
tff.productCar();
}

}


结果

生产保时捷汽车
生产拖拉机
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息