微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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
 }

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

原文地址:https://www.jb51.cc/java/125160.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐