1_开闭原则(Open Closed Principle)

2024-01-06 23:36

本文主要是介绍1_开闭原则(Open Closed Principle),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开闭原则(Open Closed Principle)

1.概念

开闭原则(Open-Closed Principle)是指一个软件实体如类、模块和函数应该对扩展开放, 对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节

2.案例演示与讲解

创建一个课程接口
public interface ICourse {Integer getId();String getName();Double getPrice();
}
创建一个课程的具体实现类
public class Course implements ICourse{private Integer id;private String name;private Double price;public JavaCourse(Integer id, String name, Double price) {this.id = id;this.name = name;this.price = price;}public Integer getId() {return this.id;}public String getName() {return this.name;}public Double getPrice() {return this.price;}
}
创建一个课程具体细节类(Java课程实现)来实现逻辑处理
public class JavaDiscountCourse extends Course {public JavaDiscountCourse(Integer id, String name, Double price) {super(id, name, price);}//假设双12活动,java课程打6折优惠逻辑处理public Double getDiscountPrice(){return super.getPrice() * 0.6;}
}public class VueDiscountCourse extends Course {public JavaDiscountCourse(Integer id, String name, Double price) {super(id, name, price);}//假设双12活动,vue课程打7折优惠逻辑处理public Double getDiscountPrice(){return super.getPrice() * 0.7;}
}
调用类实现功能
public class OpenCloseTest {public static void main(String[] args) {//创建一个java课程ICourse iCourse = new JavaDiscountCourse(1,"Java架构",11800D);JavaDiscountCourse discountCourse = (JavaDiscountCourse)iCourse;System.out.println("课程ID:" + discountCourse.getId() + "\n课程标题:《" +  discountCourse.getName() + "》" +"\n原价:" + discountCourse.getPrice() + "\n售价:" + discountCourse.getDiscountPrice());//创建一个vue课程ICourse iCourse = new VueDiscountCourse(1,"vue课程",11800D);VueDiscountCourse discountCourse = (VueDiscountCourse)iCourse;System.out.println("课程ID:" + discountCourse.getId() + "\n课程标题:《" +  discountCourse.getName() + "》" +"\n原价:" + discountCourse.getPrice() + "\n售价:" + discountCourse.getDiscountPrice());}
}

执行结果:
在这里插入图片描述

3.开闭原则类图:

在这里插入图片描述

4.开闭原则类图概念理解

创建一个接口和实现中抽象方法和实现,保持结构不变关闭的修改

如果我们对实现类中的功能不满足,可以创建一个类继承实现类来扩展功能满足需要,应该对扩展开放
java 代码实现

public interface  Book{public String getName();//获取书名public double getPrice(); //获取价格
}
public class BookeImp implements Book {@Overridepublic String getName() {return "书";}@Overridepublic double getPrice() {return 10.0;}
}
public class JavaBook extends  BookeImp {public String getName() {return "Java书";}public double getPrice() {return 100.0;}
}
public class Use {public static void main(String[] args) {//需求打印通用书名和价格Booke book = new BookeImp();System.out.println(book.getName());System.out.println(book.getPrice());//修改需求打印java书名和价格,保持原有抽象类和现实的结构修改关闭,扩展新的需求功能Booke javaBook = new JavaBook();System.out.println(javaBook.getName());System.out.println(javaBook.getPrice());}
}

这篇关于1_开闭原则(Open Closed Principle)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/577992

相关文章

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法 1、堆大小设置。 2、回收器选择。   1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。   2、对JVM内存的系统级的调优主要的目的是减少

Open a folder or workspace... (File -> Open Folder)

问题:vscode Open with Live Server 时 显示Open a folder or workspace... (File -> Open Folder)报错 解决:不可以单独打开文件1.html ; 需要在文件夹里打开 像这样

android java.io.IOException: open failed: ENOENT (No such file or directory)-api23+权限受权

问题描述 在安卓上,清单明明已经受权了读写文件权限,但偏偏就是创建不了目录和文件 调用mkdirs()总是返回false. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_E

[轻笔记] pip install : Read timed out. (closed)

添加超时参数(单位秒) pip --default-timeout=10000 install ${package_name}

Open-Sora代码详细解读(1):解读DiT结构

Diffusion Models专栏文章汇总:入门与实战 前言:目前开源的DiT视频生成模型不是很多,Open-Sora是开发者生态最好的一个,涵盖了DiT、时空DiT、3D VAE、Rectified Flow、因果卷积等Diffusion视频生成的经典知识点。本篇博客从Open-Sora的代码出发,深入解读背后的原理。 目录 DiT相比于Unet的关键改进点 Token化方

error while loading shared libraries: libnuma.so.1: cannot open shared object file:

腾讯云CentOS,安装Mysql时: 1.yum remove libnuma.so.1 2.yum install numactl.x86_64

水处理过滤器运行特性及选择原则浅谈

过滤属于流体的净化过程中不可缺的处理环节,主要用于去除流体中的颗粒物或其他悬浮物。水处理过滤器的原理是利用有孔介质,从流体中去除污染物,使流体达到所需的洁净度水平。         水处理过滤器的滤壁是有一定厚度的,也就是说过滤器材具有深度,以“弯曲通 道”的形式对去除污染物起到了辅助作用。过滤器是除去液体中少量固体颗粒的设备,当流体进入置有一定规格滤网的滤筒后,其杂质被阻挡,而

Open Source, Open Life 第九届中国开源年会论坛征集正式启动

中国开源年会 COSCon 是业界最具影响力的开源盛会之一,由开源社在2015年首次发起,而今年我们将迎来第九届 COSCon! 以其独特定位及日益增加的影响力,COSCon 吸引了越来越多的国内外企业、高校、开源组织/社区的大力支持。与一般企业、IT 媒体、行业协会举办的行业大会不同,COSCon 具有跨组织、跨项目、跨社区的广泛覆盖面,也吸引了众多国内外开源开发者和开源爱好者的关注及参与

kubernetes Pod failed to create fsnotify watcher: too many open files

fs.nr_open: 控制单个进程可以打开的文件描述符的最大数量。单个进程的文件描述符限制可以通过 ulimit 命令来设置。 /proc/sys/fs/nr_open 是一个系统级别的全局参数,表示系统中单个进程能够打开的文件描述符总数的限制。/proc/sys/fs/file-max 系统级别,当前系统可打开的最大数量/etc/security/limits.conf 用户级别,指定用户

ssh问题:Connection closed by foreign host. Disconnected from remote host

放通一个远程ip能够ssh服务器,但是报错: Connection closed by foreign host.   Disconnected from remote host。。。   解决办法: firewall防火墙放通ip。 /etc/ssh/sshd_config文件修改,运行root用户密码登,再重启sshd服务。 /etc/hosts.allow和/etc/hos