arj*_*soh 0 java inheritance design-patterns composition
我有一个类BaseClass
和一个类Subclass
,它派生Baseclass
并覆盖它的一些方法.
public class BaseClass{}
public class SubClass extends BaseClass{
//override some methods
}
Run Code Online (Sandbox Code Playgroud)
还有另一个类SimpleBaseClass
派生自BaseClass
并覆盖其他一些方法BaseClass
,因为它提供了与之相比的不同功能SubClass
public class SimpleBaseClass extends BaseClass{
//override some other methods
}
Run Code Online (Sandbox Code Playgroud)
我想在某些情况下的功能和特性赋予SubClass
的SimpleBaseClass
.最好的做法是什么?在这种情况下是否有适用的模式?简单地说,虽然可以创建一个新的SubSimpleBaseClass
派生SubClass
,但复制代码SimpleBaseClass
并以这种方式具有两个类的功能:SubClass
和SimpleBaseClass
.
public class SubSimpleBaseClass extends SubClass{
//do what SimpleBaseClass does
}
Run Code Online (Sandbox Code Playgroud)
但是这样代码就会被重新编写SubSimpleBaseClass
.避免它的最佳方法是什么?也许Composition
?请问Decorator Pattern
在这种情况下,适当的解决办法?
不要使用类层次结构来重用功能.而是使用委托模型,您可以将所需的功能SubClass
和您的假设重构SubSimpleBaseClass
为另一个类.一个简单的例子:
interface Handler {
void foo();
}
public class BaseClass {
private final Handler handler; // constructor omitted
public void bar() {
handler.foo();
}
}
Run Code Online (Sandbox Code Playgroud)
这允许您实现轻量级的"多重继承",您仍然可以BaseClass
通过多个类进行子类化,您仍然可以bar
在多个类中实现通用行为.这是一个常见的建议,继承往往被过度使用.
如果由于某种原因这是不可能的(您的示例不够详细,不能详细说明),而是重构您的代码以使用实用程序方法.切勿复制和粘贴代码.这复制了维护成本.