繁体   English   中英

方法的oop继承与仅使对象调用调用它的类中的方法

[英]oop inheritance of method vs making object only to call method in class which invoke it

我判断巫婆的方法存在问题,从设计,清理代码==好的做法来看比较好。

我在程序启动时从文件中加载了一些数据,并且类的结构如下所示: 在此处输入图片说明

更具体地说, IngredientFromXmlReaderPizzaReaderDrinksFromXmlReader在内部完成所有工作,而无需从DataFromFileLoader任何数据。

问号是DataFromFileLoader类的什么,它应该从PizzaReaderIngredientFromXmlReaderDrinksFromXml继承,并具有如下方法loadMenuFromFiles

 private void loadMenuFromFiles()
{
    this->loadIngredientsFromXml();
    this->loadPizzasFromXml();
    this->loadDrinksFromXml();    
}

这种方法:

  • 对我来说看起来更干净
  • 不要创建不需要的对象,
  • 第二种方法是DataFromFileLoader看起来并不拥挤,因为方法是在父类中实现的。

或者只是按照我正确的方式loadXml() ,他们都必须实现公共方法loadXml() ,这是AbstractReaderFromXml虚拟方法。 然后我创建调用方法的对象。

private void loadMenuFromFiles()
    {
        IngredientFromXmlReader ingreRead;
        ingreRead.loadXml();
        PizzaReader pizzaRead;
        pizzaRead.loadXml();
        DrinksFromXmlReader drinksRead;
        drinksRead.loadXml();   
    }

我为什么选择这个:

  • 更坚持单一责任原则,责任更分离,什么是优势,
  • 我没有机会在不需要的地方调用此方法,因为我需要对象这样做,

第三种选择是使这3个类的所有内部方法都静态化,但是我不太喜欢。 在我看来,它的申请量大得多,因此我尽量避免使用它。 当然,这是选项。

哪种方法更好?

最后一件事,如果这个问题适合stackoverflow或应该放

https://softwareengineering.stackexchange.com/

在我看来,这个问题的问题描述不清楚。 但是在这种情况下,我强烈建议您不要继承钻石。

继承说明了IS-A连接。 在我PizzaReader实际上并不像FileOpener PizzaReader利用FileOpener打开文件,对吗? 这意味着这是用composition代替继承的一个很好的例子。

暂无
暂无

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

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