七大设计原则之开闭原则
一、开闭原则介绍
开闭原则(Open Closed Principle)是编程中最基础,也是最重要的设计原则。编程中遵循其他原则以及使用设计模式的目的就是遵循开闭原则。
一个软件实体如类,模块和函数应该对(提供方)扩展开放,对(使用方)修改关闭。用抽象构建架构,用实现扩展细节。当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。
二、案例讲解
实现一个画图形的功能,类图设计如下:
第一种解决方案:传统方案
代码实现如下:
public class Shape{int type;
}
public class Rectangle extends Shape{public Rectangle(){super.type = 1;}}
public class Circle extends Shape{public Circle(){super.type = 2;}
}
public class GraphicEditor{public void drawShape(Shape s){if(1 == s.type){drawRectangle();} else if(2 == s.type){drawCircle();}}public void drawRectangle(){System.out.println("绘制矩形");}public void drawCircle(){System.out.println("画圆形");}}
public class Test(){public static void main(String[] args){GraphicEditor editor = new GraphicEditor();editor.drawShape(new Rectangle());editor.drawShape(new Circle());}
}
上面的实现方式比较好理解,简单易操作,但是如果这时要增加一个图形种类三角形,我们需要修改的地方很多,这就违反了开闭原则,即对扩展开放,对修改关闭。当我们给类添加新功能的时候,应该尽量不修改代码,或者尽可能少修改代码。
第二种解决方案:使用开闭原则
对上面代码改进思路:把创建Shape类做成抽象类,并提供一个抽象的draw方法,让子类去实现即可。这样有新的图形种类时,只需要让新的图形类继承Shape,并实现draw方法即可。使用方的代码就不需要修改,满足开闭原则。代码如下:
public abstract class Shape{int type;abstract void draw();
}
public class Rectangle extends Shape{public Rectangle(){super.type = 1;}public void draw(){System.out.println("绘制矩形");}
}
public class Circle extends Shape{public Circle(){super.type = 2;}public void draw(){System.out.println("画圆形");}
}
public class GraphicEditor{public void drawShape(Shape s){s.draw();}
}
public class Test(){public static void main(String[] args){GraphicEditor editor = new GraphicEditor();editor.draw(new Rectangle());editor.draw(new Circle());}
}
注:类Shape、Rectangle、Circle是提供方,类GraphicEditor是使用方
七大设计原则之开闭原则相关推荐
- 设计模式-软件架构设计七大原则及开闭原则详解
前言 在日常工作中,我们使用Java语言进行业务开发的时候,或多或少的都会涉及到设计模式,而运用好设计模式对于我而言,又是一个比较大的难题.为了解决.克服这个难题,Remi酱特别开了这个博客来记录自己 ...
- Java设计原则之单一职责原则、开闭原则、里氏代换原则
文章目录 面向对象设计原则概述 单一职责原则 开闭原则 里氏代换原则 面向对象设计原则概述 软件的可维护性(Maintainability)和可复用性(Reusability)是两个非常重要的用于衡量 ...
- 设计原则:开闭原则(OCP)
1.什么是开闭原则 开闭原则的英文是Open Closed Principle,缩写就是OCP.其定义如下: 软件实体(模块.类.方法等)应该"对扩展开放.对修改关闭". 从定义上 ...
- 设计模式-02.经典设计原则-第一节-单一职责原则,开闭原则,里式替换,接口隔离【万字长文系列】
文章目录 设计模式经典设计原则-第一节 单一职责原则(SRP) 如何理解单一职责原则? 如何判断类的职责是否足够单一? 类的职责是否设计得越单一越好? 开闭原则(OCP) 如何理解"对扩展开 ...
- [设计原则] 六大设计原则之“开闭原则”
[设计原则] 六大设计原则之"开闭原则" 目录 [设计原则] 六大设计原则之"开闭原则" 什么是开闭原则 为什么使用开闭原则 如何使用开闭原则 注意事项 总结 ...
- Java面向对象设计原则1——开闭原则
在我们学习面向对象编程的时候,总会出现一些问题,好比以前刚刚写好的代码,上线测试可以.正常运行,突然有一天说要加一个功能,改完之后,发现以前正常运行的功能不能用了,类似这样的问题有好多好多,为了避免类 ...
- 设计模式六大原则之--开闭原则(OCP)
设计模式六大原则之--开闭原则(OCP) 前言 1 描述 2 理解: 3 问题由来: 4 使用LoD的好处: 5 难点: 6 最佳实践: 7 范例: 前言 The Open - Closed Prin ...
- 关于Java面向对象程序设计原则之一——开闭原则的思考与分享
整理日期:2022-05-27 目录 一.开闭原则 二.为什么使用开闭原则 三.如何在程序设计中体现开闭原则 一.开闭原则 开闭原则(Open-Closed Principle, OCP)是指一个软件 ...
- 源码分析七大设计原则之开闭原则(Open Close Principle)
源码分析之七大设计原则 一.开闭原则(Open Close Principle) 定义:软件实体应当对扩展开放,对修改关闭,即:软件系统中包含的各种组件,例如模块(Modules).类(Classes ...
最新文章
- php删除指定图片吗,PHP 去除图片指定颜色
- 图像模糊处理(信息学奥赛一本通-T1128)
- 如何设计一个权限系统
- Kali Linux 秘籍 第三章 高级测试环境
- OAuth 授权的工作原理是怎样的?
- 【GBK、UTF-8、ISO8859-1】三种编码方式总结及实例
- 解决genemotion模拟器冲突导致的Android Studio无法启动ADB的问题
- 水泵调速c语言实验程序,C语言实验最原始.doc
- 上计算机课玩游戏检讨400字,上网课玩游戏检讨书
- 【Kafka】10道不得不会的 Kafka 面试题
- FPGA——按键消抖
- 立即执行的js插件,转成可以在VUE环境下使用,
- 小程序数据监测工具分析
- jsp之${CTX}理解
- 老板,上班迷路了,晚点到~
- 快速删除node_modules文件夹:rimraf node_modules
- 踩坑三丰云、踩坑主机屋云服务
- 约束优化求解之罚函数法
- java mvc设计_javaweb之MVC设计模式
- CAEE2023精密冲压件/五金件、精密冲床、模具展览会