简介
-
最基础,最重要的原则,其他原则主要作用用于实现开闭原则
-
一个软件实体如类,模块和函数应该对扩展开放(提供方),对修改关闭(使用者),用抽象构建框架,用实现扩展细节;
-
当软件需要变化的时候,尽量用扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现。
举例
public class Ocp {
public static void main(String[] args) {
GraphicEditor editor = new GraphicEditor();
editor.drawShape(new Circle());
}
}
// 类似通过接口实现依赖传递,消费者不用修改不用,画布提供一个公共的画形状方法
class GraphicEditor {
public void drawShape(Shape s) {
s.draw();
}
}
abstract class Shape {
int m_type;
public abstract void draw();
}
class Rectangle extends Shape {
Rectangle() {
super.m_type = 1;
}
@Override
public void draw() {
System.out.println("Rectangle");
}
}
class Circle extends Shape {
Circle() {
super.m_type = 2;
}
@Override
public void draw() {
System.out.println("Circle");
}
}
// 生产者扩展提供新的业务
class Triangle extends Shape {
Triangle() {
super.m_type = 3;
}
@Override
public void draw() {
System.out.println("rectangle");
}
}
合成复用
综合各原则,类和类发生关联时,尽量使用合成或者聚合的方式,而不是使用集成
往期
设计模式系列(二)设计模式原则——单一职责原则_Jackie的博客-CSDN博客
设计模式系列(二)设计模式原则——接口隔离原则_Jackie的博客-CSDN博客
设计模式系列(二)设计模式原则——依赖倒转原则 (dependency inversion principle)_Jackie的博客-CSDN博客
设计模式系列(二)设计模式原则——里氏替换原则(Liskov Substitution Principle)_Jackie的博客-CSDN博客