您现在的位置是:主页 > news > 京东商城网站建设/深圳推广系统
京东商城网站建设/深圳推广系统
admin2025/5/3 16:09:19【news】
简介京东商城网站建设,深圳推广系统,ps如何做网站专题,家纺 网站建设 中企动力基本介绍: 1)开闭原则(Open Close Principle)是编程中最基础、最重要的设计原则 2)一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使…
京东商城网站建设,深圳推广系统,ps如何做网站专题,家纺 网站建设 中企动力基本介绍:
1)开闭原则(Open Close Principle)是编程中最基础、最重要的设计原则
2)一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使…
基本介绍:
1)开闭原则(Open Close Principle)是编程中最基础、最重要的设计原则
2)一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节
3)当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。
4)编程中遵循其他原则,以及使用设计模式的目的就是遵循开闭原则。
代码实现;
类图设计如下:
package com.atguigu.principle.ocp;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());}}//这是一个用于绘图的类 [使用方]
class GraphicEditor {//接收Shape对象,然后根据type,来绘制不同的图形public void drawShape(Shape s) {if (s.m_type == 1)drawRectangle(s);else if (s.m_type == 2)drawCircle(s);else if (s.m_type == 3)drawTriangle(s);}//绘制矩形public void drawRectangle(Shape r) {System.out.println(" 绘制矩形 ");}//绘制圆形public void drawCircle(Shape r) {System.out.println(" 绘制圆形 ");}//绘制三角形public void drawTriangle(Shape r) {System.out.println(" 绘制三角形 ");}
}//Shape类,基类
class Shape {int m_type;
}class Rectangle extends Shape {Rectangle() {super.m_type = 1;}
}class Circle extends Shape {Circle() {super.m_type = 2;}
}//新增画三角形
class Triangle extends Shape {Triangle() {super.m_type = 3;}
}
上述方式绘制图形时,需要修改GraphicEditor.drawShape() 方法,违背了开闭原则
改进思路:
把Shape类做成抽象类,并提供一个抽象方法 draw(),让子类去实现即可,这样我们有新的图形种类时,只需要让新的图形继承Shape,并实现draw方法即可,使用方的代码就不需要修改
代码重构如下:
package com.atguigu.principle.ocp.improve;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;}@Overridepublic void draw() {// TODO Auto-generated method stubSystem.out.println(" 绘制矩形 ");}
}class Circle extends Shape {Circle() {super.m_type = 2;}@Overridepublic void draw() {// TODO Auto-generated method stubSystem.out.println(" 绘制圆形 ");}
}//新增画三角形
class Triangle extends Shape {Triangle() {super.m_type = 3;}@Overridepublic void draw() {// TODO Auto-generated method stubSystem.out.println(" 绘制三角形 ");}
}//新增一个图形
class OtherGraphic extends Shape {OtherGraphic() {super.m_type = 4;}@Overridepublic void draw() {// TODO Auto-generated method stubSystem.out.println(" 绘制其它图形 ");}
}