android 工厂方法模式应用场景,Android 设计模式之各种工厂方法模式

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

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

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

导航

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

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

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

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

抽象车类

每个车分别实现这个接口

AAffA0nNPuCLAAAAAElFTkSuQmCC

Q3

AAffA0nNPuCLAAAAAElFTkSuQmCC

Q5

AAffA0nNPuCLAAAAAElFTkSuQmCC

Q7

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

Q3Factory

AAffA0nNPuCLAAAAAElFTkSuQmCC

Q5Factory

AAffA0nNPuCLAAAAAElFTkSuQmCC

Q7Factory

最后组装成了流水线

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

抽象工厂

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

switch case

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

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

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

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

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

抽象工厂方法

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

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

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

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

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

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

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

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

AAffA0nNPuCLAAAAAElFTkSuQmCC关注

你可能感兴趣的:(android,工厂方法模式应用场景)