安卓架构师,原创29讲

Konten Video AsliPerluas Video
  • 哈喽同学们,今天学习工厂模式。
  • 工厂模式的核心在于提供创建对象功能。
  • 我们将学习简单工厂模式的实现。
  • 工厂模式可以降低模块间的耦合度。
  • 我们还可以根据参数和配置文件产生不同的实现。

哈喽同学们,我是彭老师。我们今天需要学习的是工厂模式。然后我们讲到这个设计模式,同学们就乐了,是吧?

OK,什么是工厂模式呢?
其实啊,工厂模式有常规的一些方法的演变,成一个简单的工厂模式,还有一些拓展。你比如说根据一些参数来产生不同的实现,还有根据配置文件来产生不同的实现,还有抽象方法,还有抽象工厂模式等等。

那么今天我们首先来学习入门级的一个简单工厂模式
那么工厂模式它的核心是什么呢?其实啊,它的核心是提供一个创建对象的功能,不需要关心它的具体实现。

模拟一下这样一个场景,New一个class。我们就说常用的在我们项目里面有一个UserInfo的一个Java对象,我们就把它定义成一个对象。好,那么在这里面我们简单的写两个属性:

  • private String name
  • private int age

各种方法重载的各种方法啊,这个叫我们如果说不把它给实现的话,是拗不出来的。在我们的一个Java规范当中,这叫抢劫用户,是这样吗?还给他提供一个两个参数的各种方法,再给他提供一个好get/set方法,最后面再给他来一个toString方法。

我怎么样去把这样一个UserInfo的对象给创建出来呢?
其实我是不需要关心它里面的具体实现API的接口。
那么这样一个API的接口,我就给它返回一个UserInfo的对象,我就叫create
为什么是这样来设计的呢?
其实在我们安卓的原版里面有一个BitmapFactory,它里面有方法叫decode,我们可以看一下decodeFile
那么他都是通过我们一个方法来创建一个Bitmap的对象。
其实呢,我们也可以把它简单的理解为创建为一个Info的对象。我就这里简单的定义一个就叫Creator的接口方法

那么我们简单的来实现的话,一般是怎么样去完成这样一个接口呢?一般是这样来写。
那么我们实现一下API这个方法,我们已经把它实现了。刚刚已经说到了,他不需要关心实现,我只需要拿到他的结果就行了。

那么在这里面呢,我们这样来写 UserInfo,我们把它new出来,然后呢给它来一个log日志。比如说我们就用toString方法。OK,API然后呢去new一个接口的实现APIImpl,然后呢再用我们的API.create
其实呢,这只是一种简单的接口实现,还不能看出来是工厂模式。所以说这是我们一种常规的编码。

那么简单的工厂它是怎么样去写的呢?然后呢简单的工厂啊,它其实是降低了模块间偶合度,因为我在MainActivity里面需要创建出来一个叫做UserInfo的对象,通过什么呢?通过Factory来创建。
但是呢,我又不想去关心他这里面的UserInfo是怎么实现出来的。好比是我们刚刚看到的BitmapFactory,它怎么样去把这个Bitmap给创建出来?

好,那么呢,我们这样来写,写一个简单的实现,我们就叫SimpleFactory把它放在Factory包下面吧。
OK,那么这个工厂呢我这样来写