敏捷软件开发之开放-封闭原则

** OCP:开放-封闭原则:**
软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改。

OCP建议我们应该对系统进行重构,这样以后对系统再进行同样的改动时,就不会导致更多的修改。如果正确地应用OCP,那么以后再进行同样的改动时,就只需要添加新的代码,而不必改动已经正常运行的代码。

遵循开放-封闭原则设计出的模块具有两个主要的特征:
1.对于扩展是开放的(open for extension).
2.对于修改是封闭的(close for modification).

如何做到了?:抽象

遵循OCP的Shape程序代码如下:

public interface Shape {
    void draw();
}

public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("draw a square");
    }
}

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("draw a circle");
    }
}

public class DrawAllShapes {
    public static void main(String[] args) {

        ArrayList shapes=new ArrayList<>();
        shapes.add(new Square());
        shapes.add(new Circle());
        drawAllShapes(shapes);
    }

    static void drawAllShapes(List shapes) {
        for (Shape shape : shapes) {
            shape.draw();
        }
    }
}

如果我们想要扩展drawAllShapes函数的行为:绘制一种新的形状,我们之需要增加一个新的实现Shape接口的派生类即可,而drawAllShapes函数并不需要改变。

OCP背后的主要机制是抽象和多态

你可能感兴趣的:(敏捷软件开发之开放-封闭原则)