Android Acitivity之间传递数据的静态工厂模式

静态工厂是软件工程中常见的设计思想,而Activity之间的数据传递是Android开发中常见的需求

本文将两者结合,从代码入手,一步步地进行讲解


准备工作

首先我们打开Android Studio

选择新建项目

Android Acitivity之间传递数据的静态工厂模式

一路next

Android Acitivity之间传递数据的静态工厂模式

默认MainActivity

Android Acitivity之间传递数据的静态工厂模式

我们新建一个Activity

Android Acitivity之间传递数据的静态工厂模式

命名为NewActivity

Android Acitivity之间传递数据的静态工厂模式

我们知道,要在Activity之间传递数据,需要用到intent

以前我们是这样写的


putExtra

我们先在MainActivity的布局文件中添加一个按钮,就像这样

把Button的id设为datatransform

Android Acitivity之间传递数据的静态工厂模式

效果是这样的

Android Acitivity之间传递数据的静态工厂模式

回到MainActivity,这些是Android Studio帮助我们生成的

Android Acitivity之间传递数据的静态工厂模式

添加代码如下

首先我们通过findViewById找到刚刚布局的按钮,然后为其设置监控事件

当按钮被按下时,我们new一个intent的对象,并命名为i,初始化这个对象是从当前的MainActivity到NewActivity的

调用i的putExtra方法,传递我们的数据,这里的数据是以key-value的形式给出的,如图所示

key是date,value是字符串"Hello World"

最后再用startActivity方法,启用新的Activity

Android Acitivity之间传递数据的静态工厂模式

MainActivity的部分写好了,我们看一下NewActivity的部分

先看一下NewActivity的布局文件,里面就一个Textview,而且默认是空的

Android Acitivity之间传递数据的静态工厂模式

再看一下NewActivity的代码,这是没有修改之前的

Android Acitivity之间传递数据的静态工厂模式

添加代码如下

首先定义Intent的引用,并使用getIntent方法获得intent对象

然后使用intent的getStringExtra方法获得数据并显示在TextView上

注意在使用getStringExtra方法时需要指定Key

Android Acitivity之间传递数据的静态工厂模式

运行结果

Android Acitivity之间传递数据的静态工厂模式

Android Acitivity之间传递数据的静态工厂模式

如果我们有很多数据要传,可以考虑使用Bundle包,Bundle包的用法和上面的代码很像,可以参考以下链接:

https://www.cnblogs.com/icyhusky/p/5964756.html


静态工厂方法

在使用上面的方法进行数据传递时,显然两个Activity的Key必须是一致的

在实际开发过程中,往往很多开发者共同完成一个项目,为了保证key值得一致,不出现混乱,需要极大的沟通成本

这样的做法,其实极大提高了程序的耦合性

因此,我们更推荐使用静态工厂方法

直接看代码,我们新建一个Activity,命名为StaticActivity

Android Acitivity之间传递数据的静态工厂模式

这些代码是Android Studio帮我们生成的

Android Acitivity之间传递数据的静态工厂模式

添加代码如下

我们先创建了3个静态成员变量,然后新建了静态方法newIntent

这个静态方法除了需要上帝类Context之外,还需要3个参数,分别是String、int和float类型

这个方法里做了些事情呢?首先new一个intent对象,并用上帝类Context(哪个Activity调用这个方法,Context就是哪个Activity)和目标Activity,也就是StaticActivity,初始化这个intent

然后,这个intent开始传递数据,数据的Key是StaticActivity指定的(Key的类型是String,因为putExtra的定义就是这样写的),也就是第一个数据的Key是a,第二个数据的key是b,第三个数据的key是c

那么具体的数据是什么,那就要等调用newIntent这个静态工厂函数的类给出了

Android Acitivity之间传递数据的静态工厂模式

接下来我们在StaticActivity中把数据显示出来

方法很简单 ,先获取一下intent,然后再用get...Extra方法取出对应key的value

这里的A1、B1、C1就是相应的key

Android Acitivity之间传递数据的静态工厂模式

然后再看MainActivity

先把这些注释掉

Android Acitivity之间传递数据的静态工厂模式

添加代码如下

很简单,不多说了,调用静态工厂方法,并直接把value给进去即可

Android Acitivity之间传递数据的静态工厂模式

运行如下

Android Acitivity之间传递数据的静态工厂模式


总结

静态工厂的定义是:由一个工厂对象决定创建出哪一种产品类的实例

我们刚刚的代码里,StaticActivity就是工厂类

这就是静态工厂设计模式的简单应用,这样做可以使代码更易于维护