加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 16:30:14 所属栏目:Java 来源:网络整理
导读:我正在开发一个 Android项目,我正在面对这种情况. 我有2个班: class A extends B{openDoor(){//impl}closeDoor(){//impl}}class X extends Y{openDoor(){//impl}closeDoor(){//impl}} 现在,如果你观察到这两个类在openDoor()和closeDoor() 避免重复方法的最
我正在开发一个 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
 }

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读