java – 最好的方法来避免重复的代码,如果两个类扩展不同的类

我正在开发一个 Android项目,我正在面对这种情况.

我有2个班:

class A extends B
{

openDoor(){
//impl
}

closeDoor(){
//impl
}

}

class X extends Y{

openDoor(){
//impl
}

closeDoor(){
//impl
}

}

现在,如果你观察到这两个类在openDoor()和closeDoor()

避免重复方法的最佳方法是什么?

我的方法

class ContainingDuplicateMethods{

     openDoor(){
    //impl
    }

    closeDoor(){
    //impl
    }

    }
   }

在类中创建ContainingDuplicateMethod的对象并调用方法,我们将其称为策略模式,但这是最好的解决方案吗?为什么在大型项目中,我们无法遵循这种做法,而且人们说这不是良好的做法,在这种情况下,我需要遵循哪些方法

请注意,A类和X类已经扩展了其他类,我也不想使用静态,因为 – 当程序执行开始时,静态成员被加载到内存中,直到程序被终止为止,说我的代码连续运行天或周,并使用静态引用继续创建许多对象,因此可能会有内存不足的可能.

解决方法

“有利于构成遗产”是一件值得记住的事情.

开门打开门课.包括一个门作为A和B的成员.

沃拉,完成工作.

所以A.getDoor().close(). B.getDoor().open()

如果您需要A和B的通用接口(因此您可以在某处使用),然后创建

interface HasDoor {
    Door getDoor();
}

现在A和B可以扩展任何你喜欢的类并实现HasDoor.任何需要门的课程都可以接受HasDoor(或直接接受门对象),并打开,关闭等.

没有重复的代码,充分的灵活性.

如果您需要您的门将方法返回到A和B中,则将Door类作为抽象创建,并将其作为匿名内部类在A和B中实现.抽象方法将从门被调用,然后当这些方法调用时,可以在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;
      }
 }

门是:

public abstract class Door {
      boolean closed;
      abstract notifyDoorChanged();

      public void close() {
         closed = true;
         notifyDoorChanged(closed);
      }

      // etc
 }

请注意,这与策略模式相似,但并不完全相同.策略模式有一个主对象,然后插入多种策略(即不同形式的门).这有一个门和多个其他对象使用相同类型的门,虽然你可以扩展它使用战略模式,并有很多门实施很容易.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...