繁体   English   中英

使用带有嵌套静态类的类的良好做法,然后使用更多静态方法扩展包私有抽象类以保持组织?

[英]Good practice to use a class w/ nested static classes, that then, extend package-private abstract classes with more static methods to stay organized?

也许我没有看到它,但我想不出这会导致什么问题,因为无法实例化扩展抽象类的静态类,但也许我应该使用一种设计模式。

这是我正在谈论的一个例子:

public class PetTrainer
{
    public PetTrainer(...)
    {...}

    public static class LeashInstruction extends LeashInstructionAbstract
    {
    //No Code
    }
}

在同一个包内:

abstract class LeashInstructionAbstract
{
    public static void giveTreat(...)
    {...}

    public static...
    //imagine more
}

只是为了澄清静态方法是在子类中继承的,但它不是多态的,因为您无法覆盖它们,尽管当您在子类中有具有相同签名的方法时可以隐藏它。 如果你想让事情更干净,你不需要创建一个空的静态类。 这是我根据您想要实现的目标提出的两个建议。 1.如果所有宠物训练师的LeashInstruction都相同,那么您可以执行以下操作:

public class PetTrainer 
{
    public PetTrainer(...)
    {...}

}

和:

abstract class LeashInstructionAbstract {
    public static void giveTreat() {}
}
  1. 如果 PetTrainer 类中的行为会发生变化,那么我建议执行以下操作(与抽象方法的接口):

    公共类 PetTrainer { LeashInstructionImpl leashInstruction = new LeashInstructionImpl(); 公共宠物训练器(){}

     public static class LeashInstructionImpl implements LeashInstruction { @Override public void giveTreat() { //somthing } } // Just for testing public static void main(String[] args) { PetTrainer petTrainer = new PetTrainer(); petTrainer.leashInstruction.giveTreat(); }

    }
    并且 LeashInstruction 将是:

    接口 LeashInstruction { void giveTreat(); //想象更多
    }

希望这会有所帮助。

当我回顾我年轻时的这个问题并试图回答它时,这个策略有很多问题。 第一个也是最大的问题是它给我的 ide 带来的负担,如果我必须这样做的话,复制/粘贴所有这些类会花费很长时间。 正如@GhostCat 正确指出的那样,这种策略的第二个问题是设计有一些可疑的东西,它不是 OOP。 如果您在 Java 中执行此操作,那么您不妨切换到函数式语言,因为它会更有效率。 这种策略是 OOP 的变种,变得难以管理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM