为了账号安全,请及时绑定邮箱和手机立即绑定

上一套川菜,啊不上一套粤菜吧——抽象工厂模式

定义

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

解析

比较简单的创建型模式。就是创建一系列对象,而这些对象是相互相关或者相互依赖的。
比较易懂的例子是皮肤。更换皮肤通常需要修改导航栏的样式,首页背景图等。假设这些样式封装在三个不同的对象中,对象导航栏和对象首页。如下UML
(为了让画图简单这里UML只分两个部分)
图片描述
Widget中文名即窗口组件。

客户端是Client,其中调用的是WidgetFactory接口和Index接口,Navigation接口。

而WidgetFactory接口有两个实现类,分别是蓝色组件黑色组件,因为接口规定了创建首页index和创建导航栏navigation两个方法,所以对应的两个工厂实现类也有两个对应创建方法,分别是创建自己工厂对应样式的组件。

创建的对应实现类也有对应的接口。就是黑色组件创建的导航和首页必须实现index接口和navigation接口。

这样如果在调用端需要修改组件样式的话,只需要在声明工厂的地方切换实现类即可。也就是切换皮肤。

这里要注意的是,对应的工厂实现类实例通常是单例的,因为整个进程中通常只需要一个工厂实例就够了。而产品是否单例要看实际情况。

将场景一般化就是如下UML
图片描述

定义了
一个抽象工厂接口
抽象接口的两个(实际场景里可能是多个)实现类。
两个(多个)产品接口
工厂实现类中的具体产品
和调用工厂的客户端

效果

  • 抽象与实现分离。
  • 让有相关性的产品关联起来,容易管理。
  • 如果需要切换产品实现在工厂里修改即可比较容易修改。

总结

和标题一样,如果每张桌子固定要上几类菜,如几个炒菜几份汤之类的,要川菜就把实现类换成川菜,那这些上的就是川菜,如果要换粤菜就换粤菜,这样的话菜的配置不变,但是都换成粤菜系的。
实际应用中当你需要创建一系列相关的对象的时候就可以考虑抽象工厂模式。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
2664
获赞与收藏
74

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消