设计模式课程 设计模式精讲 3-3 开闭原则 coding
1 课程讲解
1.1 开闭原则定义
1.2 不重要内容
2 代码coding
2.1 基类
2.2 需求:打印出原价和折扣后的价格。(接口不应该随意变化,面向接口编程)
1 课程讲解
1.1 开闭原则定义
一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
1.2 不重要内容
(抽象构建框架,实现扩展细节)
2 代码coding
2.1 基类
测试类:
package com.geely.design.principle.openclose;
public class TestJavaCourse {
public static void main(String[] args) {
Icourse icourse = new JavaCourse(96,"java开发教程",298.00);
System.out.println("购买课程编号为:"+icourse.getCourseId()+";课程名称为:"+icourse.getCourseName()+";课程价格为:"+icourse.getCourcePrice());
}
}
实体类:
package com.geely.design.principle.openclose;
public class JavaCourse implements Icourse {
private Integer courseId;
private String courseName;
private Double coursePrice;
public JavaCourse(Integer courseId, String courseName, Double coursePrice) {
this.courseId = courseId;
this.courseName = courseName;
this.coursePrice = coursePrice;
}
@Override
public Integer getCourseId() {
return this.courseId;
}
@Override
public String getCourseName() {
return this.courseName;
}
@Override
public Double getCourcePrice() {
return this.coursePrice;
}
}
接口:
package com.geely.design.principle.openclose;
public interface Icourse {
Integer getCourseId();//获取课程ID
String getCourseName();//获取课程名称
Double getCourcePrice();//获取课程价格
}
打印日志:
购买课程编号为:96;课程名称为:java开发教程;课程价格为:298.0 Process finished with exit code 0
2.2 需求:打印出原价和折扣后的价格。(接口不应该随意变化,面向接口编程)
测试类:
package com.geely.design.principle.openclose;
public class TestJavaCourse {
public static void main(String[] args) {
TestJavaCourse testJavaCourse = new TestJavaCourse();
testJavaCourse.showDiscountPrice();
}
public void showDiscountPrice() {
Icourse icourse = new JavaDiscountCourse(96,"java开发教程",298.00);
JavaDiscountCourse javaCourse = (JavaDiscountCourse)icourse;
System.out.println("购买课程编号为:"+icourse.getCourseId()+";课程名称为:"+icourse.getCourseName()+";课程价格为:"+javaCourse.getOrignalPrice()+"折后价格为:"+javaCourse.getDisCountPrice());
}
public void showOrignalPrice() {
Icourse icourse = new JavaCourse(96,"java开发教程",298.00);
System.out.println("购买课程编号为:"+icourse.getCourseId()+";课程名称为:"+icourse.getCourseName()+";课程价格为:"+icourse.getCourcePrice());
}
}
实体类:
package com.geely.design.principle.openclose;
public class JavaCourse implements Icourse {
private Integer courseId;
private String courseName;
private Double coursePrice;
public JavaCourse(Integer courseId, String courseName, Double coursePrice) {
this.courseId = courseId;
this.courseName = courseName;
this.coursePrice = coursePrice;
}
@Override
public Integer getCourseId() {
return this.courseId;
}
@Override
public String getCourseName() {
return this.courseName;
}
@Override
public Double getCourcePrice() {
return this.coursePrice;
}
}
补充类:
package com.geely.design.principle.openclose;
public class JavaDiscountCourse extends JavaCourse{
private Double coursePrice;
public JavaDiscountCourse(Integer courseId, String courseName, Double coursePrice) {
super(courseId, courseName, coursePrice);
}
public Double getDisCountPrice() {
return super.getCourcePrice()*0.8;
}
public Double getOrignalPrice() {
return super.getCourcePrice();
}
}
接口:
package com.geely.design.principle.openclose;
public interface Icourse {
Integer getCourseId();//获取课程ID
String getCourseName();//获取课程名称
Double getCourcePrice();//获取课程价格
}
测试结果:
购买课程编号为:96;课程名称为:java开发教程;课程价格为:298.0折后价格为:238.4 Process finished with exit code 0
设计模式课程 设计模式精讲 3-3 开闭原则 coding的更多相关文章
- 设计模式课程 设计模式精讲 6-2 抽象工厂coding
1 代码讲解 1.1 抽象工厂优点 1.2 抽象工厂缺点 1.3 为何有产品族的业务场景宜用抽象工厂设计模式?而不是工厂设计模式? 2 代码演练 2.1 抽象工厂代码演练 1 代码讲解 1.1 抽象工 ...
- 设计模式课程 设计模式精讲 10-2 外观模式coding
1 代码演练 1.1 代码演练1(不使用外观模式) 1.2 代码演练2(使用外观模式) 2 应用核心 2.1 核心 2.2 零碎知识点 1 代码演练 1.1 代码演练1(不使用外观模式) 需求: 木木 ...
- [设计模式]<<设计模式之禅>>关于开闭原则
开闭原则是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活的系统,先来看开闭原则的定义: Software entities like classes,modules and fun ...
- 设计模式 第一天 UML图,设计模式原则:开闭原则、依赖倒转原则、接口隔离原则、合成复用原则、迪米特法则,简单工厂模式
1 课程大纲 2 UML的概述 总结: UML unified model language 统一建模语言 一共有十种图: 类图 用例图 时序图 * 对象图 包图 组件图 部署图 协作图 状态图 (最 ...
- Java设计模式(1:软件架构设计七大原则及开闭原则详解)
前言 在日常工作中,我们使用Java语言进行业务开发的时候,或多或少的都会涉及到设计模式,而运用好设计模式对于我而言,又是一个比较大的难题.为了解决.克服这个难题,笔主特别开了这个博客来记录自己学习的 ...
- C#设计模式系列:开闭原则(Open Close Principle)
1.开闭原则简介 开闭原则对扩展开放,对修改关闭,开闭原则是面向对象设计中可复用设计的基石. 2.开闭原则的实现 实现开闭原则的关键就在于抽象,把系统的所有可能的行为抽象成一个抽象底层,这个抽象底层规 ...
- C#软件设计——小话设计模式原则之:开闭原则OCP
前言:这篇继续来看看开闭原则.废话少说,直接入正题. 软件设计原则系列文章索引 C#软件设计——小话设计模式原则之:依赖倒置原则DIP C#软件设计——小话设计模式原则之:单一职责原则SRP C#软件 ...
- Head First 设计模式 --3 装饰者模式 开闭原则
装饰者模式:动态的将责任附加到对象上,若要扩展功能,装饰者提供了比集成更有弹性的替代方案.设计原则:1:封装变化2:多用组合,少用继承3:针对接口编程,不针对实现编程4:为对象之间的松耦合设计而努力5 ...
- 【设计模式六大原则6】开闭原则(Open Close Principle)
定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来:在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不 ...
随机推荐
- hackinglab 冒充登录用户
首先进入网页会发现 直接用bp进行抓包然后会发现一个字母是Login这个是登录的意思发现这个字母等于0我们大胆的猜测一下这个字母等于0代表的是没有登陆而如果这个字母是1或者是2的时候就是登录了然后我们 ...
- 吴裕雄 python 机器学习——数据预处理过滤式特征选取VarianceThreshold模型
from sklearn.feature_selection import VarianceThreshold #数据预处理过滤式特征选取VarianceThreshold模型 def test_Va ...
- TCP和UDP的一些注意事项
TCP的一些注意事项 1. tcp服务器一般情况下都需要绑定,否则客户端找不到这个服务器,更无法链接到服务器 2. tcp客户端一般不绑定,因为是主动链接服务器,所以只要确定好服务器的ip.port等 ...
- Python socket day5
下载文件 程序04,05 服务端在接收到文件名时应该用try来打开文件,不应该用with open来打开否则,如果文件名不存在,用with open 会出错误 客户端要判断服务端发送的数据是否为空,不 ...
- 寒假安卓app开发学习记录(3)
今天终于开始正式的安卓软件开发学习.开始用了大约一个小时的时间把创建第一个软件的学习视频观看了一下.跟着视频一边学习一边操作. 首先是创建项目,创建的过程和之前创建Java项目的过程相似.先给app起 ...
- HttpServer性能比较
在自己的本子上随便测了下几款HttpServer,环境信息就不贴出来了,主要是比对下差距. 测试内容是输出 text/plain 的 hello, world. 先说结论:Netty > Joo ...
- 作业1:使用go搭建一个web-server
todo1:搭建web-server的原理 todo2:go实现web-server
- 转载:WAV header
转自:http://www.cnblogs.com/CoderTian/p/6657844.html WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource I ...
- 【C语言】用函数实现两个数排序(指针作函数参数)
原理就不讲了,这里用来理解指针的使用方法 #include <stdio.h> void fun(int* a,int* b) { int t; if(*a>=*b) { t = * ...
- C语言对两个浮点数进行比较的方法
C语言对两个浮点数进行比较: C语言用"=="来比较两个浮点数,返回值完全是不确定的. 因此只能定义一个精度来确定是否相等: if(fabs(a-b) < 0.000000 ...