【设计模式】软件设计七大原则 ( 开闭原则 )
文章目录
- 一、开闭原则简介
- 二、开闭原则代码示例
- 1、商品接口
- 2、普通商品类
- 3、折扣商品类
- 4、测试类
一、开闭原则简介
开闭原则 :
- 定义 : 一个 软件实体 , 类 / 模块 / 函数 , 对 扩展 开放 , 对 修改 关闭 ;
- 抽象与实现 : 用 抽象 构建框架 , 用 实现 扩展细节 ;
- 优点 : 提高 软件系统 的 可复用性 及 可维护性 ;
开闭原则 是 面向对象 设计 中 , 最基础的 设计原则 , 它指导我们建立稳定灵活的系统 ;
开发新功能时 , 尽量 不修改原有的代码 , 尽量 使用扩展增加新功能 ;
实现 开闭原则 的核心思想 是面向抽象编程 , 不是面向实现编程 ;
定义的 对象类型 是 抽象类类型 或 接口类型 , 调用的方法 是 抽象类 或 接口 中的方法 ;
抽象是 稳定的 , 让类依赖于抽象 , 对于修改来说就是封闭的 ;
通过 面向对象 的 继承 , 以及 多态机制 , 可以实现 对 抽象 的 继承 , 通过 重写改变其固有方法 , 或 实现新的扩展方法 ;
二、开闭原则代码示例
1、商品接口
package openclose;/*** 商品接口*/
public interface IGood {Integer getId();String getName();Double getPrice();
}
2、普通商品类
package openclose;/*** 普通的商品类*/
public class NormalGood implements IGood {private Integer id;private String name;private Double price;public NormalGood(Integer id, String name, Double price) {this.id = id;this.name = name;this.price = price;}@Overridepublic Integer getId() {return this.id;}@Overridepublic String getName() {return this.name;}@Overridepublic Double getPrice() {return this.price;}@Overridepublic String toString() {return "NormalGood{" +"id=" + id +", name='" + name + '\'' +", price=" + price +'}';}
}
3、折扣商品类
如果要添加一个商品打折功能 , 不能直接修改 IGood 接口 , 或 NormalGood 类 , 只要修改了 , 就给之前的功能带来了隐患 ;
根据开闭原则 , 对修改关闭 , 对扩展开放 ;
这里直接定义 NormalGood 类的子类 , 在继承 NormalGood 类的基础上 , 开发扩展的新功能 ;
package openclose;/*** 打折商品类* 加入一个 商品 打折的功能* 不能直接修改 IGood 接口 , 或 NormalGood 类* 只要修改了 , 就给之前的功能带来了隐患* 这里直接定义 NormalGood 类的子类* 在继承 NormalGood 类的基础上 , 开发扩展的新功能*/
public class DiscountGood extends NormalGood {public DiscountGood(Integer id, String name, Double price) {super(id, name, price);}@Overridepublic Double getPrice() {return super.getPrice() * 0.5;}
}
4、测试类
package openclose;public class Main {public static void main(String[] args) {IGood normalGood = new NormalGood(8, "普通商品", 88.0);System.out.println("商品信息 : " + normalGood);IGood discountGood = new DiscountGood(9, "Java 折扣课程", 88.0);System.out.println("折扣商品信息 : " + discountGood + " , 折扣价格 : " + discountGood.getPrice());}
}
执行结果 :
商品信息 : NormalGood{id=8, name='普通商品', price=88.0}
折扣商品信息 : NormalGood{id=9, name='Java 折扣课程', price=88.0} , 折扣价格 : 44.0
【设计模式】软件设计七大原则 ( 开闭原则 )相关推荐
- 软件设计的七大原则 --开闭原则 里氏替换原则 依赖倒置原则
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. 这 7 种设计原则是软件设计 ...
- 设计模式-软件设计七大原则
目录 综述 1.开闭原则 1.1开闭原则的定义 1.2开闭原则的作用 1.3开闭原则的实现方法 2.里氏替换原则 2.1里氏替换原则的定义 2.2里氏替换原则的作用 2.3里氏替换原则的实现方法 3. ...
- Java设计模式七大原则-开闭原则
开闭原则 基本介绍 开闭原则(Open Closed Principle)是编程中最基础.最重要的设计原则 一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方).用抽象构建框 ...
- 设计模式七大原则——开闭原则
1.什么是开闭原则? 开闭原则(Open Closed Principle)是编程中最基础.最重要的设计原则. 一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方).用抽象构 ...
- 设计一个扩展自抽象类geometricobject的新的triangle类_面向对象设计原则之开放封闭原则(开闭原则OCP)...
(1) 定义 一个软件实体(类.模块.函数等),对于扩展是开放的,对于更改是封闭的. 对于扩展是开放的:这意味着模块的行为是可以扩展的.当应用的需求发生改变时,我们可以对模块进行扩展,比如增加新的类或 ...
- 带你认识六种设计原则(开闭原则、里氏代换原则、依赖倒转原则....)
前言 1. 设计原则 1.1. 开-闭原则 1.2. 里氏代换原则 1.3. 依赖倒转原则 1.4. 接口隔离原则 1.5. 合成/聚合原则 1.6. 迪米特法则 前言 学习设计模式之前先要了解其中的 ...
- 六大设计原则--开闭原则
定义 software entities like classes, modules and functions should be open for extension but closed for ...
- Java设计原则——开闭原则
我们一定要给自己提出这样的任务:第一,学习,第二是学习,第三还是学习. 学习从来无捷径,循序渐进登高峰. 目录 一.基本介绍 二.应用实例 1.示例一 2.示例二 部分笔记来源于尚硅谷设计模式视频教学 ...
- 设计模式6大原则-开闭原则
设计模式6大原则-开闭原则 定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 开闭原则理念就是当需求改变时,希望在不改变原有代码的前提下,通过扩展模块.函数来满足新需求. 开闭原则是其他 ...
- 设计模式之王者原则 开闭原则
设计模式之王者原则 开闭原则 为什么说 它--开闭原则是王者原则呢? 因为所有原则都是围绕它来实现的,怎么说呢,为什么会有这么多原则呢,都是为了完成它,只要实现它你的代码就不会有什么大的问题 一.定 ...
最新文章
- Android10.0应用进程创建过程以及Zygote的fork流程-[Android取经之路]
- 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)
- SpringCloud(第二部分)
- 互联网1分钟 |1221
- java安全编码指南之:字符串和编码
- android viewpager 滑动方法,Android中Viewpager禁止滑动的实现
- VMware pro 15 ubuntu简易安装虚拟机黑屏
- Flask和WebSocket
- IOS技术分享| 你画我猜小游戏快速实现
- 32G内存服务器如何设置虚拟内存,大内存服务器设置虚拟内存
- LetCode#69(JAVA)给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去.
- ardupilot 关于设备车Rover的学习《3》------模式控制
- G1 Concurrent Refinement Thread 在干啥?
- esp32 Micropython驱动ST7735 1.8寸TFT屏幕 中文显示;时间显示、网络network实时时间获取utptime;urequests、upip等包安装
- C语言学习笔记第十天
- python爬猫眼电影影评,Python系列爬虫之爬取并简单分析猫眼电影影评
- 12小时制转24小时制
- 剑灵力士卡刀ahk_剑灵卡刀指令
- Firefox 加速技巧
- Linux中创建组的命令,linux创建用户组命令