Inheritance 继承-在基类中处理特定于子级的代码

Inheritance 继承-在基类中处理特定于子级的代码,inheritance,parent-child,Inheritance,Parent Child,我们有一个父类-平台。所有特定的设备类都继承自父类-Device1、Device2、。。。。。魔鬼 基于设备输入,我们创建相应设备类的对象并相应地工作 我在这段代码中观察到的几件事是在基类(平台类)中处理特定于设备的行为。例如 function doSomething { initiateSomething(); . if ($base->getPlatform() eq 'Device1') { ........ } sta

我们有一个父类-平台。所有特定的设备类都继承自父类-Device1、Device2、。。。。。魔鬼

基于设备输入,我们创建相应设备类的对象并相应地工作

我在这段代码中观察到的几件事是在基类(平台类)中处理特定于设备的行为。例如

function doSomething
{
    initiateSomething();
    .
    if ($base->getPlatform() eq 'Device1')
    {
        ........
    }
    startSomething();
    doneSomething();
}
这种类型的特定于设备的条件代码分布在父类中的各个位置。此代码特定于设备1,不适用于其他设备。我曾想过将这个特定于设备的代码作为函数放在Device1类中,并在这里调用它,但这也不起作用。因为此函数仅为Device1实现,所以为其他设备运行此代码将失败


非常感谢您的帮助。

您可以通过为函数的前/后调用设置特定的挂钩来实现这一点:

function doSomething
{
    initiateSomething();
    .
    preDoSomething();
    startSomething();
    doneSomething();
}

BaseDevice
{
    preDoSomething(){/+no-op+/}
}

Device1
{
    preDoSomething()
    {
      ........
    }
}

您可以通过为函数的前/后调用提供特定的挂钩来实现这一点:

function doSomething
{
    initiateSomething();
    .
    preDoSomething();
    startSomething();
    doneSomething();
}

BaseDevice
{
    preDoSomething(){/+no-op+/}
}

Device1
{
    preDoSomething()
    {
      ........
    }
}