前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >抽象工厂模式(Abstract Factory)

抽象工厂模式(Abstract Factory)

作者头像
qubianzhong
发布2019-06-26 14:35:28
2970
发布2019-06-26 14:35:28
举报
文章被收录于专栏:行者常至行者常至

抽象工厂模式(Abstract Factory)

为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
抽象工厂是工厂模式的升级版,他用来创建一组相关或者相互依赖的对象。来看下抽象工厂模式的类图:
这里写图片描述
这里写图片描述
前面咱们说的工厂模式,类的创建依赖工厂类,程序需要扩展时,我们必须创建新的工厂类。工厂类是用来生产产品的,那我们也可以把“工厂类当成我们要生产的产品”,所以抽象工厂就是“工厂的工厂”,即生产工厂的工厂。

通过一个例子,来加深对抽象工厂的理解。

代码语言:javascript
复制
//CPU工厂接口
public interface CPUFactory {
    public void createCPU();
}
代码语言:javascript
复制
//IntelCPU工厂
public class IntelCPU implements CPUFactory {
    @Override
    public void createCPU() {
        System.out.println("Intel CPU");
    }
}
代码语言:javascript
复制
//AMDCPU工厂
public class AMDCPU implements CPUFactory {
    @Override
    public void createCPU() {
        System.out.println("AMD CPU");
    }
}
代码语言:javascript
复制
//创建抽象工厂类接口
public interface Provider {
    public CPUFactory createCPUFactory();
}
代码语言:javascript
复制
public class InterCPUFactory implements Provider {
    @Override
    public CPUFactory createCPUFactory() {
        return new InterCPU();
    }
}
代码语言:javascript
复制
public class AMDCPUFactory implements Provider {
    @Override
    public CPUFactory createCPUFactory() {
        return new AMDCPU();
    }
}
代码语言:javascript
复制
public static void main(String[] args) {
        //创建一个生产CPU工厂的工厂
        Provider cpufactory = new InterCPUFactory();
        //通过CPU工厂的工厂创建一个IntelCPU工厂
        CPUFactory intelcpu = cpufactory.createCPUFactory();
        //IntelCPU工厂生产intelCPU
        intelcpu.createCPU();
    }

总结

抽象工厂的优点:
  • 抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联(例如不同厂商生产CPU)。
适用场景:
  • 一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。

Test

代码语言:javascript
复制
package com.qbz.test;

//汽车工厂
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 AbstractFactory {

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

        // 创建一个生产拖拉机工厂的工厂
        Provider tr = new SuperTractorFactory();
        // 生产拖拉机工厂
        CarFactory tf = tr.creatCarFactory();
        // 拖拉机工厂生产拖拉机
        tf.productCar();

    }

}

输出:

代码语言:javascript
复制
生产保时捷汽车
生产拖拉机
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年08月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 抽象工厂模式(Abstract Factory)
    • 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
      • 抽象工厂是工厂模式的升级版,他用来创建一组相关或者相互依赖的对象。来看下抽象工厂模式的类图:
        • 前面咱们说的工厂模式,类的创建依赖工厂类,程序需要扩展时,我们必须创建新的工厂类。工厂类是用来生产产品的,那我们也可以把“工厂类当成我们要生产的产品”,所以抽象工厂就是“工厂的工厂”,即生产工厂的工厂。
        • 通过一个例子,来加深对抽象工厂的理解。
        • 总结
          • 抽象工厂的优点:
            • 适用场景:
            • Test
            • 输出:
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档