文档章节

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

newtrek
 newtrek
发布于 2018/08/14 23:55
字数 699
阅读 7
收藏 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
粉丝 2
博文 20
码字总数 34357
作品 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
0
0
Android 架构师9 设计模式之策略模式

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

zhang_pan
2018/04/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
1
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
4
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
4
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部