静态工厂是软件工程中常见的设计思想,而Activity之间的数据传递是Android开发中常见的需求
本文将两者结合,从代码入手,一步步地进行讲解
准备工作
首先我们打开Android Studio
选择新建项目
一路next
默认MainActivity
我们新建一个Activity
命名为NewActivity
我们知道,要在Activity之间传递数据,需要用到intent
以前我们是这样写的
putExtra
我们先在MainActivity的布局文件中添加一个按钮,就像这样
把Button的id设为datatransform
效果是这样的
回到MainActivity,这些是Android Studio帮助我们生成的
添加代码如下
首先我们通过findViewById找到刚刚布局的按钮,然后为其设置监控事件
当按钮被按下时,我们new一个intent的对象,并命名为i,初始化这个对象是从当前的MainActivity到NewActivity的
调用i的putExtra方法,传递我们的数据,这里的数据是以key-value的形式给出的,如图所示
key是date,value是字符串"Hello World"
最后再用startActivity方法,启用新的Activity
MainActivity的部分写好了,我们看一下NewActivity的部分
先看一下NewActivity的布局文件,里面就一个Textview,而且默认是空的
再看一下NewActivity的代码,这是没有修改之前的
添加代码如下
首先定义Intent的引用,并使用getIntent方法获得intent对象
然后使用intent的getStringExtra方法获得数据并显示在TextView上
注意在使用getStringExtra方法时需要指定Key
运行结果
如果我们有很多数据要传,可以考虑使用Bundle包,Bundle包的用法和上面的代码很像
静态工厂方法
在使用上面的方法进行数据传递时,显然两个Activity的Key必须是一致的
在实际开发过程中,往往很多开发者共同完成一个项目,为了保证key值得一致,不出现混乱,需要极大的沟通成本
这样的做法,其实极大提高了程序的耦合性
因此,我们更推荐使用静态工厂方法
直接看代码,我们新建一个Activity,命名为StaticActivity
这些代码是Android Studio帮我们生成的
添加代码如下
我们先创建了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这个静态工厂函数的类给出了
接下来我们在StaticActivity中把数据显示出来
方法很简单 ,先获取一下intent,然后再用get...Extra方法取出对应key的value
这里的A1、B1、C1就是相应的key
然后再看MainActivity
先把这些注释掉
添加代码如下
很简单,不多说了,调用静态工厂方法,并直接把value给进去即可
运行如下
总结
静态工厂的定义是:由一个工厂对象决定创建出哪一种产品类的实例
我们刚刚的代码里,StaticActivity就是工厂类
这就是静态工厂设计模式的简单应用,这样做可以使代码更易于维护