在java中需要多继承时使用哪种设计模式

Jav*_*per 7 java design-patterns

我有一个车辆类,并且有良好的船舶和飞机检查安全性,每个级别都实施自己的安全检查.世界很好.

interface Vehicle {
    public void safetyCheck();
}


class Ship implements Vehicle {
    @Override
    public void safetyCheck() {
        //check if number of lifeboats >= number of passengers
    }
}

class Plane implements Vehicle {
    @Override
    public void safetyCheck() {
        //check if oxygen mask is in place.
    }
}
Run Code Online (Sandbox Code Playgroud)

但很快,需要的混合称为水上飞机其中重复的安全检查ShipPlane

class SeaPlane implements Vehicle {
    @Override
    public void safetyCheck() {
        //check if oxygen mask is in place.
        // && 
       //check if number of lifeboats >= number of passengers
    }
}
Run Code Online (Sandbox Code Playgroud)

哪些设计模式有助于在特定情况下减少代码冗余并使实现更清晰?

Zhe*_*dar 8

如果没有为此案例建立新的接口或类,您可以使用Composition over Inheritance原则.

所以你SeaPlane可能看起来像这样:

class SeaPlane implements Vehicle {
    private Vehicle plane,
                    ship;
    @Override
    public void safetyCheck() {
       plane.safetyCheck();
       ship.safetyCheck()
    }
}
Run Code Online (Sandbox Code Playgroud)

使用构造函数获取PlaneShip对象.