我在我的android项目结构中使用DDD,在某些域中,我需要创建一个名为" behavior"将所有屏幕行为放在此文件夹中,如此"公共类profileBehavior {..}"
项目打印:http://tinypic.com/view.php?pic=r1hppi&s=8#.VPDdSlPF_rc
随着时间的推移和改进目标的重用,我正在考虑创建一个" genericBehavior"使用常用方法,例如:
public class GenericBehavior {
private static Context context;
private static View view;
public GenericBehavior(Context context) {
context = context;
}
public GenericBehavior(View view) {
view = view;
}
public static GenericBehavior with(final Context context) {
return new GenericBehavior(context);
}
public GenericBehavior where(final View view) {
return new GenericBehavior(view);
}
在profileBehavior类中,我希望重用 with 和 where 方法来设置profileBehavior上下文并查看
像:
public class ProfileBehavior extends GenericBehavior {
public ProfileBehavior(Context context) {
super(context);
}
在profileFragment中我希望使用:
ProfileBehavior
.with(getActivity())
.where(rootView)
.listenAttachOptions()
.doScrollStuff();
我读到类型参数和接口,但我真的很困惑。在我的情况下,最好是在行为中复制方法还是有解决方案?
答案 0 :(得分:0)
是的,你可以这样做,虽然你想要修改或追加实例变量而不是替换静态变量,并且返回this
而不是新实例或者至少包含旧实例return new GenericBehavior(context, this);
的实例。 .. GenericBehavior应该是一个ProfileBehavior实现的接口,所以你可以让ProfileBehavior扩展你想要操作的其他一些类。
答案 1 :(得分:0)
有三种方式(我能想到)这样做:
where()
和with()
并扩展它。where()
和with()
(一个行为“基础”对象)的对象,并让“behavior”类的任何其他实例保存一个实例这样的基础对象作为私有成员。每个这样的类都会将每个where()
和with()
调用委托给此基础对象。 #3实施的一个例子:
class BaseBehavior implement Behavior {
public Behavior with(final Context context) {
return new BaseBehavior(context);
}
public Behavior where(final View view) {
return new BaseBehavior(view);
}
}
class AnotherBehavior implement Behavior {
BaseBehavior base;
AnotherBehavior(BaseBehavior base) {
this.base = base;
}
public Behavior with(final Context context) {
return base.with(context);
}
public Behavior where(final View view) {
return base.with(view);
}
}
一般来说,组合比继承更受欢迎(因此,如果您不使用Java 8 - 最好使用#3而不是#1),原因很多,如果仅举几例:更容易调试和维护,代码变得不那么分离,并且具有更简单的层次结构,您只能继承(扩展)一个类。