《一天聊一个设计模式》 抽象工厂

4. 抽象工厂(Abstract Factory)

Intent

提供一个接口,用于创建 相关的对象家族

Class Diagram

抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来。而工厂方法模式只是用于创建一个对象,这和抽象工厂模式有很大不同。

抽象工厂模式用到了工厂方法模式来创建单一对象,AbstractFactory 中的 createProductA() 和 createProductB() 方法都是让子类来实现,这两个方法单独来看就是在创建一个对象,这符合工厂方法模式的定义。

至于创建对象的家族这一概念是在 Client 体现,Client 要通过 AbstractFactory 同时调用两个方法来创建出两个对象,在这里这两个对象就有很大的相关性,Client 需要同时创建出这两个对象。

从高层次来看,抽象工厂使用了组合,即 Cilent 组合了 AbstractFactory,而工厂方法模式使用了继承。
在这里插入图片描述

Implementation

public class AbstractProductA {
}
public class AbstractProductB {
}
public class ProductA1 extends AbstractProductA {
}
public class ProductA2 extends AbstractProductA {
}
public class ProductB1 extends AbstractProductB {
}
public class ProductB2 extends AbstractProductB {
}
public abstract class AbstractFactory {abstract AbstractProductA createProductA();abstract AbstractProductB createProductB();
}
public class ConcreteFactory1 extends AbstractFactory {AbstractProductA createProductA() {return new ProductA1();}AbstractProductB createProductB() {return new ProductB1();}
}
public class ConcreteFactory2 extends AbstractFactory {AbstractProductA createProductA() {return new ProductA2();}AbstractProductB createProductB() {return new ProductB2();}
}
public class Client {public static void main(String[] args) {AbstractFactory abstractFactory = new ConcreteFactory1();AbstractProductA productA = abstractFactory.createProductA();AbstractProductB productB = abstractFactory.createProductB();// do something with productA and productB}
}

JDK

  • javax.xml.parsers.DocumentBuilderFactory
  • javax.xml.transform.TransformerFactory
  • javax.xml.xpath.XPathFactory

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精华Java问题总结

当时在网上汇总了不知多少面试和基础题,弄了个精华总结。 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类…

复习Java的精华总结

小白和老手都应该看看的总结 输入 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。 下面是创建 Scanner 对象的基本语法: Scanner s new Scanner(System.in); 使用方法如下: //对应类型用对应的方法接…

超硬核!躺进BAT以后我总结了出现最多的15道数组题

作为一个硬核作者,绝不和你扯废话,干货无套路送你 题目一: 给定一个数组arr,求出需要排序的最短子数组长度 要求: 时间o(n),空间o(1) 思路: 有序的数组中,任意一个数字,一定小于左…

《关于我的那些面经》滴滴Java岗(附答案)

手撕单例模式 所谓单例,就是整个程序有且仅有一个实例。该类负责创建自己的对象,同时确保只有一个对象被创建。 在Java,一般常用在工具类的实现或创建对象需要消耗资源。特点:类构造器私有、持有自己类型的属性、对外提供获取实…

《关于我的那些面经》——百度后端(附答案)

作者保证,本系列全是纯干货真实记录,绝对不是某些营销号瞎编乱造的面试。 一、公司的简介 百度是全球最大的中文搜索引擎,是中国最大的以信息和知识为核心的互联网综合服务公司,更是全球领先的人工智能平台型公司。2000年1月1日创…

《兔兔公司的历史》那些年,百度的荣耀和沉沦

这是全站最硬核的兔子700文章后的第一篇软文,觉得喜欢的同学可以三连一波,如果大家喜欢,我会出公司的历史系列、互联网大佬系列、产品经理系列,大家喜欢哪个呢? 百度公司的发展趋势 还记得南宋词人辛弃疾的那首词吗&a…

这篇不讨好任何人的回忆录,记录了我从双非学校到BAT/TMD六offer的原因

注:给我想个新名字好不好呀,采用了直接发百元红包!没别的,想让大家认识兔兔rabbit,说一下自己的经验教训,应该会对很多人有帮助。 一、前言 在今年,我要毕业了,基本结束了大学生活&…

《兔子的大厂面经合集》朋友面神策数据库,第五个问题不会,直接再见(1)

这个系列计划收集几百份朋友和读者的面经,作者合集方便查看,各位有面经屯着可以联系我哦 写数据库还真不是人人都能干的,硬是一道别的题都没问。

兔子,撒币

作为最硬核的你兔老大,我狠起来连自己都骂 一、原力第一 哈哈当然不是骂自己啦哈哈,其实是最近csdn出了一个活动:原力计划s3,弄得我现在整天想着,给你们发钱。发书。发资料。 对,就是这个玩意&#xff1a…

超硬核!数据库学霸笔记,考试/面试随便秒杀

废话不多说,上干货是兔老大的传统了,收藏就完事了。 目录 数据库系统概论 四个基本概念 数据模型 数据库系统结构 数据库系统模式的概念 数据库系统的三级模式结构 数据库的二级映像功能与数据的独立性 数据库系统的组成 关系 关系模式 关系数…

腾讯面试Android必问11题,我说的,不信就来看看

众所周知兔子啥都会那么一点,不收藏等着干啥呢 1、是否使用过本地广播,和全局广播有什么差别? 引入本地广播的机制是为了解决安全性的问题: 正在发送的广播不会脱离应用程序,比用担心app的数据泄露;其他的…

超硬核!我统计了BAT笔试面试出现频率最高的五道题,学会了总能碰到一道

所以说不要怕算法,简单的题反而出现的频率最高,不一定非要写个几百道才面试 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会…

不骗你,全网首创的超硬核的万字SQL题

因为上次发了数据库原理总结,浏览快上万了,所以把我总结的题目 也送给大家 上次的数据库原理总结 一.根据员工工资计算其个人所得税,3000元为起征点,超出3000元的部分按照10%的比例征收个人所得税,例如&…

学姐腾讯产品面经

顺利拿到sp offer,不服不行,不是这块料呀 系列文章历史: 朋友面神策数据库,第五个问题不会,直接再见 美女学姐面了美团阿里京东,这些经验实在太真实了 首先,来个背景介绍: 腾讯实…

关于阿里云服务器本地访问不了的问题

一:前几天公司购买了一台阿里云服务器,让我把之前的项目都移到阿里云服务器上,我为此专门的研究了一下阿里云服务器的基本操作和安装流程,这里我说一下我们公司的服务器配置如下: 系统就配置就是这个情况,下…

超硬核!十万字c++题,让你秒杀老师和面试官(上)

我发现呀,这大家对面试题的需求还是很大的,这里总结了上千道知识点,能换您一个收藏吗 C 引用和指针的区别? 指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。 引用在定义的时候…

当年,学姐把这份Java总结给我,让我在22k的校招王者局乱杀

可以说,学姐给我的这份文档真的把我的知识查漏补缺,面试问到了好多,值得收藏。 并发编程 一.Executor 为什么使用线程池:手动创建线程耗费性能,不利于管理。 首先创建线程池有两种方式:使用Executors工厂…

测试必经之路(探索性测试)

接下来,百万年薪测试方面也会有专题哦。 测试计划: 测试范围、方法、资源、进度、风险 测试报告: 就是把测试的过程和结果写成文档,对发现的问题和缺陷进行分析。 一、探索性测试 评估测试用例的标准 1 测试用例对被测对象的…

大学四年自学进BAT,私下存的资源/工具/网站我全贡献出来了

这些工具/网站是我横扫BAT的重要一步,甚至是决定性的一步。以后会更简历书写、面试笔试、大学学习、工具等文章。 大学四年,上课是不可能一直上课的,看课本也是不可能一直看课本的。 不是说老师教的不好,教材写的不好&#xff0c…

我是CSDN最硬核作者,谁赞成,谁反对?

也许是现在,也许是未来,我是全网最硬核的作者,最值得爱学习爱编程的崽崽们关注的作者。 一、介绍自己 哈喽大家好,我是兔老大,之前叫过兔兔兔兔兔兔、兔兔RabbitMQ等,反正都是兔子啦,自从大学…