【设计模式】抽象工厂模式(Abstract Factory Pattern)
【前言】
上次针对自己的理解书写一篇工厂模式的文章,后面对于工厂模式进行更加多的学习,于是了解到了抽象工厂模式。其实网上大多数人们都是抽象工厂模式是工厂模式的升级版本,虽然我并不知道所说的升级是什么意思,但是升级给我一种模糊的感觉。
学习了解抽象工厂模式还是不容易,我前前后后花了好几天去思考,阅览相关的代码例子,才对抽象工厂模式有一点了解。
为了准确理解升级这个词在工厂模式上的意思,我认为这样表示更好:多工厂模式(一个接口有多个工厂类,每个工厂类都可以创建接口的实例)
虽然理解了抽象工厂模式,但是我还是想不到在Android开发种和业务相互结合的应用情景,这个问题我会继续深入思考。
【特点】
1. 抽象工厂模式拥有工厂模式的特点
2.一个接口对应有多个工厂,可以归纳为一对多关系
3. 抽象工厂模式可以使代码逻辑清楚,但是接口增加分类会使多次需要修改和增加工厂类
【适用】
1.接口的业务实现产生分类的概念,每种分类都有对应的一个以上实现类。
【图解】
基本形式:

特殊形式:

【例子】
// 图片二值化接口(黑白化)
public interface Binarization{
public Image getBinarizationImage();
}
// 速度优先的算法(分类一)
public abstract class SpeedBinarization implements Binarization{
}
// 空间优先的算法(分类二)
public abstract class SpaceBinarization implements Binarization{
}
// 速度优先算法1
public class SpeedAlgorithm1 extends SpeedBinarization{
public Image getBinarizationImage(){
// do some thing
}
}
// 速度优先算法2
public class SpeedAlgorithm2 extends SpeedBinarization{
public Image getBinarizationImage(){
// do some thing
}
}
// 空间优先算法1
public class SpaceAlgorithm1 extends SpaceBinarization{
public Image getBinarizationImage(){
// do some thing
}
}
// 空间优先算法2
public class SpaceAlgorithm2 extends SpaceBinarization{
public Image getBinarizationImage(){
// do some thing
}
}
// 抽象工厂
public interface BinarizationFactory{
public Binarization getBinarization(String name);
}
// 速度优先的工厂
public class SpeedFactory implements BinarizationFactory{
public Binarization getBinarization(String name){
if(name.equals("one")){
return new SpeedAlgorithm1();
}else if(name.equals("two")){
return new SpeedAlgorithm2();
}
return null;
}
}
// 空间优先的工厂
public class SpaceFactory implements BinarizationFactory{
public Binarization getBinarization(String name){
if(name.equals("one")){
return new SpaceAlgorithm1();
}else if(name.equals("two")){
return new SpaceAlgorithm2();
}
return null;
}
}
// 抽象工厂创建器public class BinarizationFactoryCreator{
public static BinarizationFactory getFactory(String factory){
if(factory.equals("speed")){
return new SpeedFactory();
}else if(factory.equals("space")){
return new SpaceFactory();
}
return null;
}
}
【设计模式】抽象工厂模式(Abstract Factory Pattern)的更多相关文章
- 设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释
抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2709 ...
- C#设计模式——抽象工厂模式(Abstract Factory Pattern)
一.概述在软件开发中,常常会需要创建一系列相互依赖的对象,同时,由于需求的变化,往往存在较多系列对象的创建工作.如果采用常规的创建方法(new),会造成客户程序和对象创建工作的紧耦合.对此,抽象工厂模 ...
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...
- 【设计模式】抽象工厂模式 Abstract Factory Pattern
简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...
- 二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例有Message和MessageModel,Messag ...
- 【UE4 设计模式】抽象工厂模式 Abstract Factory Pattern
概述 描述 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类:具体的工厂负责实现具体的产品实例 抽象工厂中每个工厂可以创建多种产品(如苹果公司生产iPhone.iPad): 工厂方法 ...
- 设计模式之抽象工厂模式(Abstract Factory Pattern)
一.抽象工厂模式的由来 抽象工厂模式,最开始是为了解决操作系统按钮和窗体风格,而产生的一种设计模式.例如:在windows系统中,我们要用windows设定的按钮和窗体,当我们切换Linux系统时,要 ...
- Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...
- Objective-C设计模式——抽象工厂模式Abstract Factory(对象创建)
抽象工厂模式 理解了工厂方法模式,其实抽象工厂和工厂方法模式有很多的相似之处.抽象工厂同样是分离客户端对象的创建和逻辑代码的,但是抽象工厂往往是产生一组数据而不单单是产生一个产品. 抽象工厂提供一个创 ...
- 六个创建模式之抽象工厂模式(Abstract Factory Pattern)
问题: 使用工厂方法模式的主要问题是工厂类过多,每个产品对应一个工厂,不利于维护.因此可以考虑使用一个工厂创建一个产品族. 定义: 提供创建一些列相关或相互依赖的对象实例的接口,这些类可以称为一个产品 ...
随机推荐
- 第一次安装myeclipse+tomcat经验
在网上找了很多资料,这里记录一下验证有用的资料,避免以后走弯路 1.安装myeclipse 参考如下URL,亲测有用 https://blog.csdn.net/qingjianduoyun/arti ...
- 在Ubuntu中,vi命令编辑异常
在Ubuntu中,进入vi命令的编辑模式,发现按方向键不能移动光标,而是会输出ABCD,以及退格键也不能正常删除字符.这是由于Ubuntu预装的是vim-tiny,而我们需要使用的是vim-full, ...
- The Non-Inverting Amplifier Output Resistance by Adrian S. Nastase [转载]
Source Address: http://masteringelectronicsdesign.com/the-non-inverting-amplifier-output-resistance/ ...
- SV-assertion
断言(assert)是一种描述性语言,通过描述的期望结果来进行仿真验证. 断言有一个更加基础的信息,我们称为属性(property),属性可以作为断言结果,功能覆盖点,形式检查和约束随机激励生成. 断 ...
- CentOS 7 实现zabbix agent 自动添加,并链接到指定的模版
如果添加的agent端数量较少时 , 手动添加还是可以的 , 如果数量较多 , 那么zabbix-server 的Discovery自动发现功能便派上了用场 首先所需要加入的服务器zabbix-age ...
- 论文速读(Yongchao Xu——【2018】TextField_Learning A Deep Direction Field for Irregular Scene Text)
Yongchao Xu--[2018]TextField_Learning A Deep Direction Field for Irregular Scene Text Detection 论文 Y ...
- 博客系统(cnblog)
1.用户表:Userinfo 2.博客站点表:Blog 3.标签表:Tag 4.分类表:Category 5.文章表:Article 6.点赞踩表:ArticelUpDown 7.评论表:Commen ...
- Tensorflow object detection API 搭建属于自己的物体识别模型
一.下载Tensorflow object detection API工程源码 网址:https://github.com/tensorflow/models,可通过Git下载,打开Git Bash, ...
- CCF CSP 201812-1 小明上学
题目链接:http://118.190.20.162/view.page?gpid=T80 问题描述 试题编号: 201812-1 试题名称: 小明上学 时间限制: 1.0s 内存限制: 512.0M ...
- CCF CSP 201709-1 打酱油 (贪心)
题目链接:http://118.190.20.162/view.page?gpid=T63 问题描述 试题编号: 201709-1 试题名称: 打酱油 时间限制: 1.0s 内存限制: 256.0MB ...