一个Activity通常有多个入口,往往我们都需要根据传入数据的不同进行不同的呈现、操作。例如,一个具备草稿箱的编辑器。一方面可以通过“新建”形成一个空白编辑界面,也可以对“已存草稿”进行二次编辑(当然可以更多,如转发等等)。同一个“编辑Activity”因为不同的Intent需要有不同的初始化逻辑。
这与传统的class的构造过程不同之处在于,class对外提供了对象创建的接口,进行了受限的初始化,并且这种限制表现为具有不同参数方法,而不是一种“口头”的约定。
EditActivity.java
public class EditActivity extends Activity {
private String fromActivity;
private String editText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.layout_edit);
//合理性验证和初始化
fromActivity = getIntent().getStringExtra(IntentUtil.INTENT_DATA_FROM);
if( TextUtils.isEmpty( fromActivity ) )
return;
String titleString = "新建";
if( fromActivity.equals(DraftActivity.class.getName()))
titleString = "编辑";
((TextView)findViewById(R.id.title)).setText(titleString);
editText = getIntent().getStringExtra(IntentUtil.INTENT_DATA_EDITTEXT);
if( ! TextUtils.isEmpty(editText) )
((EditText)findViewById(R.id.edit)).setText(editText);
}
}
public class EditClass {
private String fromActivity;
private String editText;
private EditClass( String fromActivity , String editText )
{
this.fromActivity = fromActivity;
this.editText = editText;
}
public EditClass initFromNew( String fromActivity , String editText )
{
if( null == fromActivity || "".equals(fromActivity) )
return null;
if( null == editText || "".equals(editText) )
return null;
EditClass instance = new EditClass(fromActivity , editText);
//进行一个空白界面的初始化
//XXXXX
//
return instance;
}
public EditClass initFromDraft( String fromActivity )
{
if( null == fromActivity || "".equals(fromActivity) )
return null;
EditClass instance = new EditClass(fromActivity , null);
//进行一个二次编辑的初始化
//XXXXX
//
return instance;
}
}
如果为Activity划分一下两种关联角色,类的创建者和类的使用者,创建者有什么办法限制Activity的创建?是和实例中一样,允许使用者将任意的字段填入Intent,只要满足创建者的”参数合理化判断流程“?还是有什么办法能够像传统类一样,限定一些特殊的创建接口供使用者去选择。
欢迎讨论!