东莞网站建设效果知更鸟wordpress
东莞网站建设效果,知更鸟wordpress,企业邮箱登录,南京网站优化技术文章目录 基本介绍看下面一段代码方式 1 的优缺点改进的思路分析 基本介绍 开闭原则#xff08;Open Closed Principle#xff09;是编程中最基础、最重要的设计原则 一个软件实体如类#xff0c;模块和函数应该对扩展开放(对提供方)#xff0c;对修改关闭(对使用方)。用抽… 文章目录 基本介绍看下面一段代码方式 1 的优缺点改进的思路分析 基本介绍 开闭原则Open Closed Principle是编程中最基础、最重要的设计原则 一个软件实体如类模块和函数应该对扩展开放(对提供方)对修改关闭(对使用方)。用抽象构建框架用实现扩展细节。 当软件需要变化时尽量通过扩展软件实体的行为来实现变化而不是通过修改已有的代码来实现变化。 编程中遵循其它原则以及使用设计模式的目的就是遵循开闭原则
看下面一段代码
看一个画图形的功能。 类图设计如下 代码展示
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;}
}方式 1 的优缺点
优点是比较好理解简单易操作。缺点是违反了设计模式的 ocp 原则即对扩展开放(提供方)对修改关闭(使用方)。即当我们给类增加新功能的时候尽量不修改代码或者尽可能少修改代码.比如我们这时要新增加一个图形种类 三角形我们需要做如下修改修改的地方较多
改进的思路分析
思路把创建 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 OtherGraph());}
}//这是一个绘图的类 [使用方]
class GraphicEditor {// 接受Shape对象调用draw方法public void drawShape(Shape s) {s.draw();}
}//Shape类基类
abstract class Shape {//抽象方法public abstract void draw();}class Rectangle extends Shape {Overridepublic void draw() {// TODO Auto-generated method stubSystem.out.println(绘制矩形);}
}class Circle extends Shape {Overridepublic void draw() {// TODO Auto-generated method stubSystem.out.println(绘制圆形);}
}//新增画三角形
class Triangle extends Shape{Overridepublic void draw() {// TODO Auto-generated method stubSystem.out.println(绘制三角形);}
}//新增一个图形
class OtherGraph extends Shape{Overridepublic void draw() {// TODO Auto-generated method stubSystem.out.println(绘制其他图形);}}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92502.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!