use*_*009 12 java android code-duplication
我正在开发一个Android项目,我正面临这种情况.
我有2节课:
class A extends B
{
openDoor(){
//impl
}
closeDoor(){
//impl
}
}
class X extends Y{
openDoor(){
//impl
}
closeDoor(){
//impl
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果你观察到两个类openDoor()和两个常见的方法closeDoor()
什么是避免重复方法的最佳方法?
我的方法
class ContainingDuplicateMethods{
openDoor(){
//impl
}
closeDoor(){
//impl
}
}
}
Run Code Online (Sandbox Code Playgroud)
在类中创建ContainingDuplicateMethods对象并调用方法,我们将其称为策略模式,但这是最佳解决方案吗?为什么,因为在大型项目中我们不能遵循这种方法,人们说它不是很好的做法,在这种情况下,我需要遵循什么方法?
请注意,class A and X已经扩展了其他类,我也不想使用静态因为 - 静态成员在程序执行开始时被加载到内存中,并且将在内存中直到程序终止,比如我的代码连续运行数天或数周继续使用静态引用创建许多对象,因此我们可能会耗尽内存.
Tim*_*m B 16
"赞成组合而非继承"是一件值得记住的事情.
有一个Door开放和关闭的课程.包括a Door作为两者的成员A和B.
瞧,工作完成了.
所以A.getDoor().close().B.getDoor().open()等等
如果您需要两个通用的接口A和B(所以你可以使用的地方),然后创建
interface HasDoor {
Door getDoor();
}
Run Code Online (Sandbox Code Playgroud)
现在A,B可以扩展您喜欢和实现的任何类HasDoor.任何需要门的类都可以接受HasDoor(或直接接受Door物体)并打开,关闭等.
没有重复的代码,充分的灵活性.
如果您需要Door调用方法早在A和B然后创建Door类的抽象和实现它A,并B作为一个匿名内部类.抽象方法将被调用Door,然后你可以做任何的处理是必要的A,并B当这些方法被调用.
例如,A类变为:
class A implements HasDoor {
private Door door = new Door() {
@override void notifyDoorChanged(boolean closed) {
// The door is telling us its been opened or closed
}
}
@override
public Door getDoor() {
return door;
}
}
Run Code Online (Sandbox Code Playgroud)
门在哪里:
public abstract class Door {
boolean closed;
abstract notifyDoorChanged();
public void close() {
closed = true;
notifyDoorChanged(closed);
}
// etc
}
Run Code Online (Sandbox Code Playgroud)
请注意,这与策略模式类似 - 但它并不完全相同.策略模式有一个主对象,然后您插入多个策略(即不同形式的门).这有一个门和多个其他对象使用相同类型的门,但您可以扩展它以使用策略模式并且非常容易地实现多个门实现.
| 归档时间: |
|
| 查看次数: |
8924 次 |
| 最近记录: |