开闭原则介绍
设计模式中最重要的原则!!!
违反开闭原则的例子
绘制不同图案的例子
代码
public class Ocp { public static void main(String[] args) { //使用看看存在的问题 GraphicEditor graphicEditor = new GraphicEditor(); graphicEditor.drawShape(new Rectangle()); graphicEditor.drawShape(new Circle()); } } //这是一个用于绘图的类[使用方] class GraphicEditor{ //接收shape对象,根据type,来绘制不同的图形 public void drawShape(Shape s){ if (s.m_type == 1){ drawRectangle(s); }else if(s.m_type == 2){ drawCircle(s); } } public void drawRectangle(Shape r){ System.out.println("矩形"); } public void drawCircle(Shape r){ System.out.println("圆形"); } } //[提供方] class Shape{ int m_type; } class Rectangle extends Shape{ Rectangle(){ super.m_type = 1; } } class Circle extends Shape{ Circle(){ super.m_type = 2; } }
需求:如果添加一个绘制三角形怎么办?
可以看到,使用方也得修改代码。这个就违反了开闭原则。
改进方案
如果新增加一个图形,扩展个实现类(提供方),就实现shape就可以了,使用方不需要改任何一个代码。符合开闭原则。
测试
完