一个功能需求提出来,有时会把这个功能封装成为一个模块。假如有多个地方需要调用这个模块的话,那么不同调用者处理该功能的方法可能不一样。
最简单的例子,大学毕业设计做的一个 “公司人员管理” 的系统。
简单起见,将人员角色分3类:实习生、员工、经理,并各自有一个Activity管理他们:
InternActivity
EmployeeActivity
ManagerActivity
假设目前阶段已经做好对这三个角色的基本操作——增删改查。 现在客户要求有”人员统计“的需求。我们会将统计设计成一个独立的模块, 来负责统计数据显示的ReportActivity中,我们要去判断不同角色的不同情况,做出相应的判断.
一般的做法是这样的:
实习生、员工、经理的Activity中,通过Intent启动ReportActivity,然后传入一个标识”flag“进去,
ReportActivity分别对带来的flag判断,是 实习生、员工、经理 中的哪一类,用if else 语句或者switch语句,对传入不同的角色进行不同的统计。
这样一来,ReportActivity要做的判断就很多,ReportActivity和三个角色的耦合度就比较高了。假如有一个新的角色“试用期的员工”要管理,那么需要去修改ReportActivity,再来一个if 判断flag是否是试用期员工,这样不够独立。
具体代码示例:
1. 实习生的Activity,上面就一个【查看实习生报表】mReportBtn按钮作为演示,表示要进入报表的Activity,并设置带入一个flag=1
/**
* 实习生 业务界面
*/
public class InternActivity extends Activity implements OnClickListener{
Button mReportBtn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intern);
mReportBtn = (Button) findViewById(R.id.intern_reportBtn);
mReportBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(this, ReportActivity.class);
intent.setFlags(1); // 假设标识1是实习生
startActivity(intent);
}
}
2. 员工的Activity,同上,就一个【查看员工报表】mReportBtn按钮作为演示,表示要进入报表的Activity 并设置带入一个flag=2
/**
*员工 业务界面
*/
public class EmployeeActivity extends Activity implements OnClickListener{
Button mReportBtn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_employee);
mReportBtn = (Button) findViewById(R.id.employee_reportBtn);
mReportBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(this, ReportActivity.class);
intent.setFlags(2); // 假设标识2是 员工
startActivity(intent);
}
}
2. 员工的Activity,同上,就一个【查看员工报表】mReportBtn按钮作为演示,表示要进入报表的Activity,并设置带入一个flag=3
/**
* 经理 业务界面
*/
public class ManagerActivity extends Activity implements OnClickListener{
Button mReportBtn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manager);
mReportBtn = (Button) findViewById(R.id.manager_reportBtn);
mReportBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(this, ReportActivity.class);
intent.setFlags(3); // 假设标识3是经理
startActivity(intent);
}
}
4. 最后是ReportActivity,这里要处理三者的不同情况,在这里打印几句话示意即可。
/**
* 报表
*/
public class ReportActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_report);
int flag = getIntent().getFlags();
Log.d("test", "flag = " + flag);
// 这里需要根据不同的业务,做各种的处理
switch (flag) {
case 1:
Log.d("test", "在报表处理实习生的业务数据,并显示 情况.");
Log.d("test", "工资为例: 计算基本工资 * 0.6 = 实际工资");
break;
case 2:
Log.d("test", "在报表处理员工的业务数据,并显示 情况. ");
Log.d("test", "工资为例 计算基本工资 * 1.0 = 实际工资");
break;
case 3:
Log.d("test", "在报表处经理的业务数据 并显示 情况. 计算基本工资 * 1.0 + 绩效工资 = 实际工资");
Log.d("test", "工资为例 计算基本工资 * 1.0 + 绩效工资 = 实际工资");
break;
default:
break;
}
}
}
Demo源码: http://download.csdn.net/detail/w315251124/8586193