我正在为android创建一个自定义布局。布局实现是完全相同的,只是一次我需要从RelativeLayout扩展,一次我需要从LinearLayout扩展。
class Layout1 extends LinearLayout {
// methods and fields
}
class Layout2 extends RelativeLayout {
// the same EXACT methods and fields
}如何使用继承来避免代码重复并一次性实现我的方法。
发布于 2010-06-06 02:08:53
我不知道它是否适合您的用例,但您可以考虑通过添加"other“类的字段来使用委托。
但我很悲观,因为这些类的关系太密切了。
发布于 2010-06-06 02:14:19
你可以使用组合和类似“策略”模式的东西:
class YourLayout extends ViewGroup {
ViewGroup strategy;
public YourLayout( Condition someCondition ) {
if( someCondition.useLinear() ) {
strategy = new LinearLayout(); // or Layout1
} else {
strategy = new RelativeLayout();
}
}
public View findFocus() {
return strategy.findFocus();
}
.... rest of the methods:
/ rest of specific EXACT methods and fields
}您甚至可以在运行时更改strategy。
这样,您的YourLayout类就可以同时使用这两种场景。
发布于 2010-06-10 04:17:13
我使用了委托,尽管有点不同。我的类中唯一的重载方法是一个重载的dispatchDraw。所以我把它移到了一个不同的类中,并在每个扩展的类中都包含了它的一个实例。
class MyLinearLayout extends LinearLayout {
MyDraw md = new MyDraw();
@Override
protected void dispatchDraw(Canvas canvas) {
md.draw(canvas);
super.dispatchDraw(canvas);
}
}
class MyRelativeLayout extends RelativeLayout {
// as above
}虽然我仍然有两个扩展的类,但我不会复制之前复制的代码,这是我想要实现的。
https://stackoverflow.com/questions/2981451
复制相似问题