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

时间:2014-03-11 18:21:48

标签: 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.
    }
}

但很快就需要一种叫做水上飞机的混合动力车,它复制ShipPlane的安全检查

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

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

2 个答案:

答案 0 :(得分:7)

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

所以你的SeaPlane看起来像这样:

class SeaPlane implements Vehicle {
    private Vehicle plane,
                    ship;
    @Override
    public void safetyCheck() {
       plane.safetyCheck();
       ship.safetyCheck()
    }
}

构造函数使用PlaneShip对象。

答案 1 :(得分:1)

您可以应用策略模式将组件的某些行为与组件定义分开。然后,您可以在多个类中使用这些行为,以避免冗余。