抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families of related or dependent objects without specifying their concrete classes",翻译,“为创建一组相关或相互依赖的对象提供一个借口,无需指定它们的详细类”。抽象工厂模式一般是用于创一族产品,而且这族产品分不同的等级;不同的详细工厂类生产不同等级的一族产品。抽象工厂模式也有四种角色:抽象工厂、详细工厂、抽象产品和详细产品,详细解释參见“Java
工厂方法模式”
一文。抽象工厂模式的类图例如以下:

能够看到产品族包含ProductA和ProductB两种产品,每一个详细工厂都能生产这两种产品,仅仅是ConcreteFactory1生产的等级为1的族产品;ConcreteFactory2生产的是等级为2的族产品。以下以上图为模型,写一个demo,測试抽象工厂模式。

抽象工厂:AbstractFactory接口

//抽象工厂,定义了生产族产品的方法;
public interface AbstractFactory {
public ProductA factoryA();
public ProductB factoryB();
}

抽象产品:ProductA接口

//抽象产品A定义了产品的公共方法,产品A和B属于一个产品族
public interface ProductA {
public void method1();
public void method2();
}

抽象产品:ProductB接口

//抽象产品B定义了产品的公共方法,产品A和B属于一个产品族
public interface ProductB {
public void method1();
public void method2();
}

详细工厂(生产等级为2的族产品):ConcreteFactory1类

//ConcreateFactory1是用来生产等级为1的产品A,B;
public class ConcreateFactory1 implements AbstractFactory { //生产等级为1的产品A
@Override
public ProductA factoryA() {
// TODO Auto-generated method stub
return new ConcreateProductA1();
} //生产等级为1的产品B
@Override
public ProductB factoryB() {
// TODO Auto-generated method stub
return new ConcreateProductB1();
} }

详细工厂(生产等级为1的族产品):ConcreteFactory2类

public class ConcreateFactory2 implements AbstractFactory {

	//生产等级为2的产品A
@Override
public ProductA factoryA() {
// TODO Auto-generated method stub
return new ConcreateProductA2();
} //生产等级为2的产品B
@Override
public ProductB factoryB() {
// TODO Auto-generated method stub
return new ConcreateProductB2();
}
}

详细产品(等级为1的A产品):ConcreteProductA1类

//等级为1的详细产品A
public class ConcreateProductA1 implements ProductA { @Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("等级为1的产品A的method1()");
} @Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("等级为1的产品A的method2()");
}
}

详细产品(等级为2的A产品):ConcreteProductA2类

//等级为2的详细产品A
public class ConcreateProductA2 implements ProductA { @Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("等级为2的产品A的method1()");
} @Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("等级为2的产品A的method2()");
}
}



详细产品(等级为1的B产品):ConcreteProductB1类

//等级为1的产品B
public class ConcreateProductB1 implements ProductB{ @Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("等级为1的产品B的method1()");
} @Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("等级为1的产品B的method2()");
}
}

详细产品(等级为2的B产品):ConcreteProductB2类

//等级为2的产品B
public class ConcreateProductB2 implements ProductB { @Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("等级为2的产品B的method1()");
} @Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("等级为2的产品B的method2()");
}
}

执行结果:

等级为1的产品A的method1()

等级为1的产品A的method2()

等级为1的产品B的method1()

等级为1的产品B的method2()

等级为2的产品A的method1()

等级为2的产品A的method2()

等级为2的产品B的method1()

等级为2的产品B的method2()

总结:

抽象工厂模式相对于工厂方法模式来说,每一个详细工厂能够生产一族产品(即多种产品);而工厂方法模式是详细工厂生产对应的详细产品,仅仅能生产一种产品。当产品族中仅仅有一种产品时抽象工厂模式退化成工厂方法模式。

Java 抽象工厂模式的更多相关文章

  1. Java抽象工厂模式

    Java抽象工厂模式 基本定义 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象 ...

  2. 设计模式(四)——Java抽象工厂模式

    抽象工厂模式 1 基本介绍 1) 抽象工厂模式:定义了一个 interface 用于创建相关或有依赖关系的对象簇,而无需指明具体的类 2) 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合. 3) ...

  3. java 抽象工厂模式简单实例

    抽象工厂模式:提供一个创建一系列的相关的或者依赖的对象的接口,无需指定它们的具体实现类,具体的时间分别在子类工厂中产生. 类似于工厂模式:隔离了具体类的生产实现,使得替换具体的工厂实现类很容易.包含有 ...

  4. Java设计模式(三) 抽象工厂模式

    原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...

  5. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

  6. java设计模式(三)--抽象工厂模式

    转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...

  7. java设计模式之抽象工厂模式

    上一篇文章(http://www.cnblogs.com/liaoweipeng/p/5768197.html)讲了简单工厂模式,但是简单工厂模式存在一定的问题,如果想要拓展程序,必须对工厂类进行修改 ...

  8. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  9. Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

随机推荐

  1. HDU 1007 近期点对

    分治法求近期点对 递归将点不断分成小组.计算最短距离.此时的最短距离不过两点都属两块的某一块(这里的切割点是mid点). 还须要考虑两点分属两块的情况. 这时对于选点则把范围缩小到了以mid为中心. ...

  2. 专注UI——有用技术:模糊搜索

    在如今的项目中.须要做模糊搜索,在曾经技术的基础上非常快得完毕了第一版.大家先看看第一版的效果,我们一会做评论: 0基础: 我们可能部分源代码(附件中会有所有源代码) <span style=& ...

  3. 《sql---教学反馈系统-阶段项目2》

    /* a) 创建数据库 使用T-SQL创建数据库feedback,要求:①一个主要文件(存放在第一个硬盘分区C:\project文件夹下),初始大小为10M,最大为200M,文件自动增长率为15% ② ...

  4. Echart饼图、柱状图、折线图(pie、bar、line)加入点击事件

    var myChart= echarts.init(document.getElementById('myChart')); myChart.on('click', function (param) ...

  5. QT4和QT3的区别

    著名的QT库前一阵子升级到4.xx版本了,我目前在开发的一个基于QT3的软件,由于受到QThread的各种困扰,因此打算尝试将代码升级到QT4, 但是当我实际开始升级工作后,才发现QT3和QT4的变化 ...

  6. ORA-12520错误解决一则

    问题描写叙述: 今天突然发现连接数据库时报错,用pl/sql dev连接数据时,有时能连接上,有时连接时报: ORA-12520: TNS: 监听程序无法找到须要的server类型的可用句柄 通过se ...

  7. iOS得知1_初体验

    UIView:父类的所有控件,所有的UIView它是一个容器.可容纳其他UIView UIController:用于控制UIView,责创建/销毁自己的UIView,显示/隐藏UIView.处理UIV ...

  8. Windows编程之非模态对话框

    1  创建非模态对话框 <1>  HWNDCreateDialog(  HINSTANCE hInstance,  // handle to module LPCTSTRlpTemplat ...

  9. CentOS 6.5 配置 SSDB 1.8.0

    环境说明: OS:CentOS 6.5  (阿里云ECS) 相关链接: 1.SSDB 下载配置:http://ssdb.io/docs/install.html 2.SSDB 入门文档:http:// ...

  10. 备份恢复与CRM集成的sharepoint站点

    在部署CRM与Sharepoint2010集成文档管理之后,一直担心如果需要在新服务器上重新部署CRM, 那么之前与CRM集成的Sharepoint2010文档内容,是否可以重新正确映射到相应的文档位 ...