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的更多相关文章

  1. 设计模式课程 设计模式精讲 6-2 抽象工厂coding

    1 代码讲解 1.1 抽象工厂优点 1.2 抽象工厂缺点 1.3 为何有产品族的业务场景宜用抽象工厂设计模式?而不是工厂设计模式? 2 代码演练 2.1 抽象工厂代码演练 1 代码讲解 1.1 抽象工 ...

  2. 设计模式课程 设计模式精讲 10-2 外观模式coding

    1 代码演练 1.1 代码演练1(不使用外观模式) 1.2 代码演练2(使用外观模式) 2 应用核心 2.1 核心 2.2 零碎知识点 1 代码演练 1.1 代码演练1(不使用外观模式) 需求: 木木 ...

  3. [设计模式]<<设计模式之禅>>关于开闭原则

    开闭原则是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活的系统,先来看开闭原则的定义: Software entities like classes,modules and fun ...

  4. 设计模式 第一天 UML图,设计模式原则:开闭原则、依赖倒转原则、接口隔离原则、合成复用原则、迪米特法则,简单工厂模式

    1 课程大纲 2 UML的概述 总结: UML unified model language 统一建模语言 一共有十种图: 类图 用例图 时序图 * 对象图 包图 组件图 部署图 协作图 状态图 (最 ...

  5. Java设计模式(1:软件架构设计七大原则及开闭原则详解)

    前言 在日常工作中,我们使用Java语言进行业务开发的时候,或多或少的都会涉及到设计模式,而运用好设计模式对于我而言,又是一个比较大的难题.为了解决.克服这个难题,笔主特别开了这个博客来记录自己学习的 ...

  6. C#设计模式系列:开闭原则(Open Close Principle)

    1.开闭原则简介 开闭原则对扩展开放,对修改关闭,开闭原则是面向对象设计中可复用设计的基石. 2.开闭原则的实现 实现开闭原则的关键就在于抽象,把系统的所有可能的行为抽象成一个抽象底层,这个抽象底层规 ...

  7. C#软件设计——小话设计模式原则之:开闭原则OCP

    前言:这篇继续来看看开闭原则.废话少说,直接入正题. 软件设计原则系列文章索引 C#软件设计——小话设计模式原则之:依赖倒置原则DIP C#软件设计——小话设计模式原则之:单一职责原则SRP C#软件 ...

  8. Head First 设计模式 --3 装饰者模式 开闭原则

    装饰者模式:动态的将责任附加到对象上,若要扩展功能,装饰者提供了比集成更有弹性的替代方案.设计原则:1:封装变化2:多用组合,少用继承3:针对接口编程,不针对实现编程4:为对象之间的松耦合设计而努力5 ...

  9. 【设计模式六大原则6】开闭原则(Open Close Principle)

      定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来:在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不 ...

随机推荐

  1. pycharm的一些快捷键[转]

    编辑类: Ctrl + Space 基本的代码完成(类.方法.属性)Ctrl + Alt + Space 类名完成Ctrl + Shift + Enter 语句完成Ctrl + P 参数信息(在方法中 ...

  2. splay(1区间翻转区间最值与区间修改)

    bzoj1251权限题 题目点这里,你懂得 直接上板子,这个要好好体会 操作是最经典的. #include <algorithm> #include <iostream> #i ...

  3. 【StarUML】时序图

    时序图是可视化地展示对象与对象之间的联系的图,与其他的图相比,它跟侧重于表现为了完成一个用例,对象之间是怎么协同工作的. 之前学习的组件图.用例图都能表现对象之间的联系,侧重的是"有哪些联系 ...

  4. 1.2、初识WebRTC

    文章导读:本节内容,如标题所讲,“初识webrtc”.读完之后,我需要你能清楚三个问题:第一.真正的搞明白实时音视频在生产环境中的真实应用以及前景分析:第二.开发一个符合商业标准的实时音视频应用需要解 ...

  5. Crawlab-分布式爬虫管理系统

    一.简介 Crawlab 基于Celery的爬虫分布式爬虫管理平台,支持多种编程语言以及多种爬虫框架. Github: https://github.com/tikazyq/crawlab 参考资料 ...

  6. C# Socket通信DEMO

    一.套接字(socket)概念 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本 ...

  7. Dart语言学习(二) Dart的常量和变量

    1.使用var声明变量,可赋予不同类型的值 Dart是一个强大的脚本类语言,可以不预先定义变量类型 ,自动会类型推导 Dart中定义变量可以通过var关键字可以通过类型来申明变量 var str='t ...

  8. idea2019.2激活至2089年!

    上图! 激活到2089年8月,绝对够用! ​ 注意:在激活之前,无需改动 host 文件. 资料自取:链接:https://pan.baidu.com/s/1MzX5ewt6lbzHYuggP5sGE ...

  9. ES6-形参默认值

    在定义一个函数的时候,我们定义了几个函数的参数,但是在调用的时候我们可能并没有传入足够的参数,那么未被满足的参数的值就是undefined,在ES6中如果有这种情况我们可以给形参一个默认值,如果该形参 ...

  10. 8,xhtml和html有什么区别

    8,xhtml和html有什么区别 功能上有差别:xhtml可以兼容各大浏览器,手机,以及pda,浏览器也能快速准确地翻译网页 书写嘻惯的差别:xhtml必须正确的嵌套,闭合,区分大小写,文档必须有根 ...