上一篇:设计模式系列(四)七大设计原则-----里氏替换原则 下一篇:设计模式系列(六)七大设计原则-----迪米特法则与合成复用原则
思路:把创建 Shape类改为抽象类,并提供一个 抽象的draw方法,让子类去实现即可 ,这样我们有新的图形种类的时候,只需要让新的图形类继承 Shape 类,并实现 draw 方法即可,适用方的代码就不需要修改,满足了开闭原则
public class Ocp { public static void main(String[] args) { GraphicEditor graphicEditor = new GraphicEditor(); graphicEditor.drawShape(new Rectangle()); graphicEditor.drawShape(new Circle()); graphicEditor.drawShape(new Triangle()); graphicEditor.drawShape(new OtherGraphic()); } } //这是一个用于绘图的类[使用方] class GraphicEditor { //接收Shape 对象,调用draw 方法 public void drawShape(Shape s) { s.draw(); } } //Shape 类,基类 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(" 绘制矩形"); } } class Circle extends Shape { Circle() { super.m_type = 2; } @Override public void draw() { System.out.println(" 绘制圆形"); } } //新增画三角形 class Triangle extends Shape { Triangle() { super.m_type = 3; } @Override public void draw() { System.out.println(" 绘制三角形"); } } //新增一个图形 class OtherGraphic extends Shape { OtherGraphic() { super.m_type = 4; } @Override public void draw() { System.out.println(" 绘制其它图形"); } }