抽象工厂模式(Abstract Factory)

转载 2016年08月29日 21:53:12

抽象工厂模式(Abstract Factory)

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

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

这里写图片描述

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

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

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

总结

抽象工厂的优点:

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

适用场景:

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

Test

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();

    }

}

输出:

生产保时捷汽车
生产拖拉机

设计模式——抽象工厂模式(Abstract Factory)

要想正确的理解设计模式,首先必须明确它是为了解决什么问题而提出来的。 抽象设计模式概念:         针对抽象工厂这个设计模式,我查找了不少资料,感觉只有涉及产品级别和产品族的才是理解了抽象工厂设...
  • u012909091
  • u012909091
  • 2014年08月02日 16:52
  • 3606

【java设计模式】之 抽象工厂(Abstract Factory)模式

1. 女娲的失误         上一节学习了工厂模式,女娲运用了该模式成功创建了三个人种,可是问题来了,她发现没有性别……这失误也忒大了点吧……竟然没有性别,那岂不是……无奈,只好抹掉重来了,于是所...
  • eson_15
  • eson_15
  • 2016年04月26日 23:49
  • 11657

抽象工厂模式(abstract)创建型模式 c#简单例子

抽象工厂模式(abstract)创建型模式 c#简单例子 适用于玩家用户数play1、play2....有变化,而行为move、jum无变化时...
  • zhgl7688
  • zhgl7688
  • 2014年12月11日 19:18
  • 902

Factory Method vs Abstract Factory

Factory Method vs Abstract Factory
  • u010373266
  • u010373266
  • 2016年12月20日 16:26
  • 318

设计模式:Abstract Factory和Builder(比较区别,个人认为讲得很明白)

如果说 Factory和Prototype是同一个层次的话,那么Abstract Factory和Builder就是更高一级的层次。 1 Abstact Factory   在上面的Factory类型...
  • lovingprince
  • lovingprince
  • 2007年04月17日 10:59
  • 4231

利用抽象工厂模式连接不同的数据库

预备知识: DAO: Data Access Object.                a Data Access Object provides the operations to create...
  • qqhw123
  • qqhw123
  • 2011年08月07日 13:08
  • 3070

抽象工厂模式(Abstract Factory)

概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来...
  • weiyonghua
  • weiyonghua
  • 2007年09月29日 19:52
  • 308

Abstract Factory抽象工厂模式

Abstract Factory抽象工厂模式 (转)     抽象工厂是一种创建型模式,是为了解决实例化时所带来的问题。     我们先来看看是什么问题,有的时候我们会遇到这种情况,我们需要一系列的对...
  • zlb789
  • zlb789
  • 2008年11月26日 09:33
  • 314

抽象工厂模式(Abstract Factory) Java

I.定义 提供一个创建一系列相关或相互依赖的接口,而无需指定它们具体的类。 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。 I.类图 ...
  • dingsai88
  • dingsai88
  • 2016年06月17日 10:41
  • 333

抽象工厂模式 Abstract Factory Pattern

 一. 抽象工厂模式概述   抽象工厂模式是工厂模式中最一般、最抽象的一种表现形式,是对工厂方法模式的进一步扩充。工厂方法模式可以对一类产品的建造进行管理,将建造具体产品的建造过程交给到具体的子类中完...
  • Brookes
  • Brookes
  • 2007年12月04日 16:33
  • 1473
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:抽象工厂模式(Abstract Factory)
举报原因:
原因补充:

(最多只允许输入30个字)