美文网首页干货程序员郭志敏的程序员书屋
设计模式-抽象工厂-不过一横一竖

设计模式-抽象工厂-不过一横一竖

作者: 凝枫 | 来源:发表于2014-12-06 22:08 被阅读209次

抽象工厂

你是这个工厂的BOSS,而不是一个小车间主任。你必须具备掌控全局的权力与能力

真的该使用它吗?

个人感觉抽象工厂是诸多设计模式中最为“宏伟”的一个模式,同时也是一个相对复杂的模式。

所以请首先注意,你所面临的功能需求/非功能需求,是否确实有以下“一横一竖”
(若不明白,我之后会有详细实例说明)

一横:横向扩展,比如平级业务场景,平级的项目部署,未来还会继续在这个基础上进行平级横向扩展
一竖:纵向产品族,每个横向的工厂下面有一套规整统一,扩展性较少的产品。(纵向扩展的难度,将比横向扩展要大)

------【实际应用举例说明】--------------------

我的所有举例均尽可能取自于生产项目中的实际运用,出于篇幅考虑做一定程度删减

现在有如下一个业务平台,将至少要对接3个终端接入,PC,手机与开放API,而这3个终端都具有4个对身份认证要求严格的业务,“登录”,“支付”,“退款”,“提现”。
从系统架构上来说,整套系统采用分布式的设计,3个终端的控制层与核心业务处理层相分离,所以,3个平级的控制层需要4个认证处理完成的结果生成Bean,给到核心业务处理层进行处理,粗略架构图如下图:

架构图

一横:三个平级的平台控制层,未来或许会扩展更多
一竖:四个业务处理模块,而且比较长时间里纵向不会发生太多的变化

然后我们把抽象工厂的两个核心点“工厂”与“产品”拼装上来,看看效果如何

“伪类图”

大概的样子出来了吧

再来套用标准的抽象工厂类图来看一下(由于4个方法太占篇幅,就只以两个举例了)

抽象工厂模式标准类图

很显然Bean就是Product角色了,而client角色就是我们的核心业务层的实现类了,他们在拿到验证结果Bean后进行具体的业务处理

具体的代码我正在整理中,完成了我会在放出源码文件,同时也会在github上放一份

做到这里,你可以再在立体化思考一下,不用总想这个代码是你一个人开发的:

假设你是这个项目的架构设计师,你需要统筹control层与service层的开发接口与规范,那么如上面的这种设计,当你将任务发放给下属的程序猿们时,他们能否在你划定的区域内进行良好的业务处理和扩展呢? 如果你觉得可以,那说明这个抽象工厂咱搭建得没问题。

 

-------------总结思考-----------------------------------------

来看看这么做了会有怎么样的影响?

如果在PC、手机、API的平级又出现了另外一个终端,怎么办?很好办,就按照这个标准的工厂接口以及产品的划分进行具体的实现就好了

如果是要纵向新增一个产品呢,比如现在进行一个抽奖活动,在各个平台均出现了一个“抽奖身份验证”的需求,这样一来怎么办呢?好像,是不是必须得从顶头的工厂开始修改了...?貌似是一个悲伤的故事...

所以这样一来,可以发现一个现象:抽象工厂结构规范严谨,在横向扩展上优势明显,但在纵深上产品扩展显得有些力不从心。

抽象工厂,大家伙,使用在大场面,所以,你可以再看看,你的系统架构/功能点,有没有“一横一竖”的需求呢?

其他实际运用场景(不断更新补充):
1. 面对不同的数据库(Factory),创建连接、连接池、预处理语句(Product族)等等

2. Spring源码结构中有用到,具体忘记了

以上均为我个人在参考一定书籍以及网上文章后总结的观点,一定还有欠妥之处,只求尽量简单与实际的分享给大家,欢迎讨论拍砖。

参考书籍:

[1]陈臣,王斌.研磨设计模式.清华大学出版社.2010.
[2]Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides,设计模式:可复用面向对象软件的基础. 2003


相关文章

  • 设计模式-抽象工厂-不过一横一竖

    抽象工厂你是这个工厂的BOSS,而不是一个小车间主任。你必须具备掌控全局的权力与能力 个人感觉抽象工厂是诸多设计模...

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • Android 源码设计模式解析与实战 读书笔记 6 抽象工厂模

    创建型设计模式 —— 抽象工厂模式 1. 抽象工厂模式介绍 抽象工厂模式(Abstract Factory Pat...

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • Go语言设计模式(3)抽象工厂模式

    Go语言设计模式(3)抽象工厂模式 抽象工厂模式的定义 抽象工厂模式的定义如下: Provide an inter...

  • 创建型设计模式

    一 . 工厂模式 二. 抽象工厂设计模式

  • 抽象工厂模式

    抽象工厂设计模式 介绍 抽象工厂设计模式是设计模式中“创建型模式”中的一种,它是用来创建其它工厂的超级工厂。所以该...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

网友评论

    本文标题:设计模式-抽象工厂-不过一横一竖

    本文链接:https://www.haomeiwen.com/subject/lixntttx.html