文档章节

Android中的设计模式之抽象工厂模式

newtrek
 newtrek
发布于 2018/08/14 23:55
字数 699
阅读 9
收藏 0

参考

  • 《设计模式解析》 第十一章 Abstract Factory模式
  • 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式
  • 《Android源码设计模式解析与实战》第6章 创建型设计模式--抽象工厂模式

意图

协调对象的实例化,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

我觉得就是在工厂方法模式里的工厂类再做一层抽象,从一维抽象升级为二维抽象,在纵向的基础上又加了横向。

别名

Kit

适用场景

  • 一个系统要独立于它的产品创建,组合和表示时。
  • 一个系统要由多个产品系列中的一个来配置时。
  • 当你要强调一系列相关的产品对象的设计以便进行联合使用时。

结构

结构

  • AbstracFactory: 抽象工厂,它声明了一组用于创建产品的方法,每一个方法对应一种产品。
  • ConcreteFactory: 具体工厂,它实现了在抽象工厂中定义的创建产品的方法,生成一组具体产品,这些产品构成了一个产品种类,每一个产品都位于某个产品等级结构中。
  • AbstractProduct: 抽象产品角色,他为每种产品声明接口
  • ConcreteProduct: 具体产品角色,他定义了具体工厂生产的具体产品对象,实现抽象产品接口中声明的业务方法。

例子1 车厂造车

描述

奥迪Q3,Q5,Q7都是一个车系,但是三者之间的零部件差别却是很大,比如Q3的发动机是国产的,Q7是原装进口的,Q3的轮胎是普通轮胎,Q7是越野轮胎。所以工厂造一辆车,要分别造发动机,轮胎,制动系统组成。

结构

结构

代码实现

有类图了,略

应用例子2 Android中的MediaPlayerFactory

优点

  • 分离接口和实现,客户端使用抽象工厂来创建需要的对象,而客户端根本不知道具体的实现是谁,客户端只是面向产品的接口编程而已。

缺点

  • 使类文件爆炸
  • 不太容易扩展新的产品类,每当我们想要增加一个产品类就需要修改抽象工厂,那么所有的具体工厂都要修改。

© 著作权归作者所有

newtrek
粉丝 3
博文 21
码字总数 35117
作品 0
江北
程序员
私信 提问
[Andriod设计模式之旅]——Builder模式

版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/78764592 前言 具体介绍Builder设计模式之前,首先我们...

紫雾凌寒
2017/12/10
0
0
移动开发之设计模式- 代理模式(IOS&Android)

资源 完全参照 代理模式|菜鸟教程但不包括IOS代码 代理模式 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有...

FlanneryZJ
2018/12/18
0
0
设计模式知识梳理(1) - 结构型 - 适配器模式

一、基本概念 1.1 定义 适配器模式 将 某个类的接口 转换成 客户端期望的另一个接口 来表示,让原本因接口不能一起工作的两个类可以协同工作。 经典的适配器模式 可以分为下面三类: 类 的适...

泽毛
2018/06/24
0
0
设计模式2——Factory设计模式

Factory工厂设计模式为创建对象提供了一种抽象,而对使用者屏蔽了对象创建的具体细节过程,工厂模式有三种:简单工厂模式,抽象工厂模式和工厂方法模式。 1. 简单工厂模式: 又叫静态工厂模式...

小米米儿小
2013/12/05
181
0
Android 架构师9 设计模式之策略模式

前言 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们之间可以相互替换。这些策略算法是相同行为的不同实现。 需求 三国故事中,刘备要到江东娶孙权的妹妹孙尚香,由于这行...

zhang_pan
2018/04/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

arduino项目-1. 模拟楼道灯

@toc 1.1 情景说明 说明 漆黑的夜晚,当有人非法进入一所房屋,房屋内的灯在恰当的时间亮起,也许会有效阻止非法活动的继续。 效果展示 1.2 实验器材 器材名称 数量 继电器 1 人体红外感应器...

acktomas
4分钟前
1
0
Nacos 常见问题及解决方法

Nacos 开源至今已有一年,在这一年里,得到了很多用户的支持和反馈。在与社区的交流中,我们发现有一些问题出现的频率比较高,为了能够让用户更快的解决问题,我们总结了这篇常见问题及解决方...

阿里云官方博客
10分钟前
2
0
pinyin4j 满足中文转拼音的需求

引入依赖 // https://mvnrepository.com/artifact/com.belerweb/pinyin4j //汉字转拼音compile group: 'com.belerweb', name: 'pinyin4j', version: '2.5.1' 写入中文转拼英的工具......

edison_kwok
15分钟前
2
0
IPSE接入Substrate/Polkadot插槽实现互操作性的运行原理

Substrate框架将区块链的众多功能都模块化,对于开发者来说,只是一个选择的问题,同时还保持了众多的可以定制的功能和模块,比如底层通信模块,比如账户体系,比如共识机制等都是可以自己定...

IPSE
21分钟前
15
0
linux配置安装phpMyAdmin的步骤记录

1、首先在phpMyAdmin官方网站 http://www.phpmyadmin.net/downloads下载源码包,或者通过脚本之家进行下载://www.jb51.net/codes/405261.html ,下载后上传到服务器解压即可,或者通过Linux...

蜗牛女孩
22分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部