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

Android 设计模式之各种工厂方法模式

标签:
Android

久违的设计模式系列视频。之前写过三篇设计模式。感兴趣的可以看看。

单例模式

观察者模式

策略模式

好了,我们开始正式开始介绍工厂方法模式,简单工厂方法模式(静态工厂方法模式),抽象工厂方法模式。

部分摘选《Android 源码设计模式 解析与实战》

导航

1.什么是工厂方法模式,简单工厂方法模式(静态工厂方法模式),抽象工厂方法模式。

2.工厂方法模式,简单工厂方法模式,抽象工厂方法模式的区别

首先!上例子!

小M 是一家汽车厂的厂长,对他来说,组装汽车没什么好神秘的,无非就是将一些零件组装起来,小M的车厂就是负责某款SUV车型,比如Q3,Q5,Q7 小M的车厂有三条产品线。

将车抽象出来,将车的公共属性定义在抽象车类里

5b8811cf0001c29d04670169.jpg

抽象车类

每个车分别实现这个接口

5b8811d000011d8e06390236.jpg

Q3

5b8811d00001db9e06020257.jpg

Q5

5b8811d10001492906640218.jpg

Q7

一种车一个工厂,将工厂的方法抽象出来

5b8811d100012e7105370117.jpg

每种车的工厂实现抽象工厂

5b8811d10001776205670213.jpg

Q3Factory

5b8811d20001c01105450235.jpg

Q5Factory

5b8811d2000156d805660232.jpg

Q7Factory

最后组装成了流水线

5b8811d200014c5906460272.jpg

这就是工厂方法模式,主要分4大块,一是抽象工厂,二是具体工厂,三是抽象产品,四是具体产品


5b8811d30001f0f506460384.jpg

工厂方法对应每一种产品,都有一种工厂,通过反射的方式可以简化成一个抽象工厂一个工厂方法

5b8811e30001969606100142.jpg 

抽象工厂

5b8811e40001438506290459.jpg

具体工厂

总结一下,以上就是工厂方法模式,定义一个用创建对象的接口,让子类决定实例化哪个类。工厂方法模式是创建型设计模式之一,是一种简单的模式,开发中应用广泛。

在不复杂的类中可以将抽象工厂类和具体工厂类简化成一个有静态方法的工厂类。在上面的例子中,可以有两张方式实现,一是通过switch case 方式实现,二是通过反射的方式实现,

5b8811e40001e49307630483.jpg

switch case

5b8811e50001e83707430420.jpg

反射

有多个工厂类的模式是工厂方法模式,只有一个工厂类的模式是简单工厂模式(也叫静态工厂方法模式)

以上就是工厂方法模式及静态工厂方法模式。

抽象工厂我们继续上一个例子

小M 车厂增加一个新生产线,生产Q9,那么这种情况依然属于工厂方法模式,因为此时只需要加一个产品实现类即可。满足开闭原则。

当小M车厂想生产倒车仪,需要增加一个抽象产品。和实现产品,及新的抽象工厂和产品工厂,由于每个车现在都需要倒车仪,所以还需要将车与倒车仪进行组装。

两个产品用工厂方法模式的,uml如下;

 5b8811e60001845a06150649.jpg

小M发现可以将两个产品在一个工厂生产。经改变

5b8811e60001032a06320622.jpg

抽象工厂方法

如果另一个产品不是倒车仪而是一个与车无关的东西,那么就不能用抽象工厂方法模式了。

抽象工厂方法模式:创建一组或者是相互依赖的对象提供一个接口,而不需要制定它们具体的类。

抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。

具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。

抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。

具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现

我在学习的时候是将工厂方法模式与抽象方法模式放在一起对比看的,更易于理解,本篇的工厂方法模式是从抽象工厂方法模式中截取的,相信大家能看出来。

最后总结一下这两种模式:

5b8811e700019dd109350121.jpg

关注

原文链接:http://www.apkbus.com/blog-912299-76542.html

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消