What is the meaning and reasoning behind the Open/Closed Principle?

后端 未结 14 1199
死守一世寂寞
死守一世寂寞 2020-12-02 08:31

The Open/Closed Principle states that software entities (classes, modules, etc.) should be open for extension, but closed for modification. What does this mean, and why is i

14条回答
  •  心在旅途
    2020-12-02 08:48

    Open Closed Principle is very important in object oriented programming and it's one of the SOLID principles.

    As per this, a class should be open for extension and closed for modification. Let us understand why.

    class Rectangle {
        public int width;
        public int lenth;
    }
    
    class Circle {
        public int radius;
    }
    
    class AreaService {
        public int areaForRectangle(Rectangle rectangle) {
            return rectangle.width * rectangle.lenth;
        }
    
        public int areaForCircle(Circle circle) {
            return (22 / 7) * circle.radius * circle.radius;
        }
    }
    

    If you look at the above design, we can clearly observe that it's not following Open/Closed Principle. Whenever there is a new shape(Tiangle, Square etc.), AreaService has to be modified.

    With Open/Closed Principle:

    interface Shape{
        int area();
    }
    
    class Rectangle implements Shape{
        public int width;
        public int lenth;
    
        @Override
        public int area() {
            return lenth * width;
        }
    }
    
    class Cirle implements Shape{
        public int radius;
    
        @Override
        public int area() {
            return (22/7) * radius * radius;
        }
    }
    
    class AreaService {
        int area(Shape shape) {
            return shape.area();
        }
    }
    

    Whenever there is new shape like Triangle, Square etc. you can easily accommodate the new shapes without modifying existing classes. With this design, we can ensure that existing code doesn't impact.

提交回复
热议问题