基本描述

需求变更:
假设书店原有4大名著,现在按照9折销售图书,请打印输出打折前后的图书信息。

遵照“开闭原则”中对修改关闭的原则,不能直接修改IBook接口和NovelBook 类,而是通过增加一个子类OffNovelBook来完成 。

代码实现

项目结构

运行截图

代码

/*
书的接口
*/public interface IBook{public String getName();public double getPrice();public String getAuthor();}
/*** 一个书的实现类(小说)*/
public class NovelBook implements IBook{private String name;private Double price;private String author;public NovelBook(String name,double price,String author){this.name = name;this.price = price;this.author = author;}public String getName(){return this.name;}  public double getPrice(){return this.price;}public String getAuthor() {return  this.author;}}
/*** 重写里面的getPrice方法*/
public class OffNovelBook extends NovelBook{private double price;public OffNovelBook(String name,Double price,String author){super(name,price,author);this.price = price;}//覆写价格方法,当价格大于40,就打8析,其他价格就打95析public double getPrice(){if(this.price > 50){return this.price * 0.85;}else{return this.price * 0.95;}}}

public class Main {public static void main(String[] args){IBook novel1 = new NovelBook("西游记",30,"吴承恩");IBook novel2 = new NovelBook("红楼梦",40,"曹雪芹");IBook novel3 = new NovelBook("三国演义",50,"罗贯中");IBook novel4 = new NovelBook("水浒传",60,"施耐庵");System.out.println("书籍名字:"+novel1.getName()+"书籍作者:"+novel1.getAuthor()+"书籍价格:"+novel1.getPrice());System.out.println("书籍名字:"+novel2.getName()+"书籍作者:"+novel2.getAuthor()+"书籍价格:"+novel2.getPrice());System.out.println("书籍名字:"+novel3.getName()+"书籍作者:"+novel3.getAuthor()+"书籍价格:"+novel3.getPrice());System.out.println("书籍名字:"+novel4.getName()+"书籍作者:"+novel4.getAuthor()+"书籍价格:"+novel4.getPrice());System.out.println("---------以下为打折后----------");OffNovelBook offNovelBook1 = new OffNovelBook("西游记",30.0,"吴承恩");OffNovelBook offNovelBook2 = new OffNovelBook("红楼梦",40.0,"曹雪芹");OffNovelBook offNovelBook3 = new OffNovelBook("三国演义",50.0,"罗贯中");OffNovelBook offNovelBook4 = new OffNovelBook("水浒传",60.0,"施耐庵");System.out.println("书籍名字:"+offNovelBook1.getName()+"书籍作者:"+offNovelBook1.getAuthor()+"书籍价格:"+offNovelBook1.getPrice());System.out.println("书籍名字:"+offNovelBook2.getName()+"书籍作者:"+offNovelBook2.getAuthor()+"书籍价格:"+offNovelBook2.getPrice());System.out.println("书籍名字:"+offNovelBook3.getName()+"书籍作者:"+offNovelBook3.getAuthor()+"书籍价格:"+offNovelBook3.getPrice());System.out.println("书籍名字:"+offNovelBook4.getName()+"书籍作者:"+offNovelBook4.getAuthor()+"书籍价格:"+offNovelBook4.getPrice());}
}

“开闭原则”实现图书售卖简单实现相关推荐

  1. 七大软件设计原则之一 | 开闭原则

    公众号「蝉沐风」,你们的赞和评论对我很重要,欢迎大家关注交流 开闭原则是指一个软件实体(模块.类.方法等)应该对扩展开放,对修改关闭 我举一个例子,陀螺是个程序喵,创办了一个生产猫粮的公司--跑码场, ...

  2. 《设计模式》——开闭原则

    一.什么是开闭原则 对修改关闭,对扩展开放.比如有一个书城,售卖书籍有原价,现在要新增一个打折价.那么,一定要保证已有功能不被修改破坏,而是把新功能扩展出来,不要影响原有功能,而是把新功能扩展出来,不 ...

  3. 面向对象软件设计的“开—闭”原则

    1.什么是开闭原则         "开-闭"原则是指软件实体应当对扩展性开放,对修改关闭.即软件实体应该在不修改的前提下扩展,这个原则实际上为软件设计指明了目标.我们知道软件设计 ...

  4. 漫谈面向对象基石之开闭原则(OCP)(转)

    原帖地址: http://www.cnblogs.com/yukaizhao/archive/2010/06/29/ood-ocp.html 开闭原则的意思是软件实体应该对扩展开发,对修改关闭(Sof ...

  5. 一种思路:策略模式 + 反射工厂,很好的实现了开闭原则

    作者 | 麻辣你个王子 来源 | blog.csdn.net/qq_28675967/article/details/90581208 应用场景:某天接到了一个需求,品牌给了一个第三方接口,例如:ww ...

  6. 设计模式中的开闭原则

    Table of Contents 1 设计模式中的开闭原则 1.1 基本原则 2 模式中的开-闭原则 2.1 策略模式 2.2 简单工厂 2.3 工厂方法 2.4 抽象工厂 2.5 建造者模式 2. ...

  7. 设计模式--6大原则--开闭原则

    开闭原则(Open Closed Principle) 开闭原则的核心是:对扩展开放,对改动关闭 白话意思就是我们改变一个软件时(比方扩展其它功能).应该通过扩展的方式来达到软件的改变,而不应爱改动原 ...

  8. 设计模式-软件架构设计七大原则及开闭原则详解

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

  9. 面向对象设计原则之开闭原则

    两截门--一个被水平分割为两部分的门,这样每一部分都可以独立保持开放或封闭 开放-封闭原则(The Open-Closed Principle) 软件实体(类.模块.函数)应该是可以扩展的,但是不可以 ...

  10. 深入浅出设计模式原则之开闭原则(OCP)

    下面以两个例子来解释开闭原则(程序代码) [按例1]Windows 的桌面主题设计 分析:Windows 的主题是桌面背景图片.窗口颜色和声音等元素的组合.用户可以根据自己的喜爱更换自己的桌面主题,也 ...

最新文章

  1. python绘制三维轨迹_Python学习(一) —— matplotlib绘制三维轨迹图
  2. VMware ESXi导出OVF模板
  3. JavaWeb项目前端规范(采用命名空间使js深度解耦合)
  4. ppt流程图字体太小_简单三步,用WPS轻松完成一个又大气又好看的流程图!
  5. POJ_3984迷宫问题(bfs基础题)
  6. Linux 配置vim
  7. centos7 安装wekan 看板
  8. 【论文阅读】A Memory-Efficient Deterministic Finite Automaton-Based Bit-Split String Matching Scheme
  9. Node+puppeteer学习笔记(三)--API问题解决--切换frame和iframe框
  10. linux 命令 aft,AFT整理出来的NPC检测命令大全
  11. Numerical analysis second editon Timothy sauer 书附代码
  12. 阿里达摩院/字节后端研发一面凉面经
  13. python如何模拟微信扫码登录_python 微信扫码登录故障解决
  14. conda create创建虚拟环境失败
  15. 在网页地图图片上加注企业和“圳品”数量信息+1
  16. STC12C5A60S2单片机驱动超声波
  17. 十一、SpringCloud实用篇_Gateway服务网关
  18. win10---血战上海滩
  19. 蜂鸣器(HC6800-EM3 V2.2开发板)
  20. 传感器配件/胀差卡件A6210Emerson

热门文章

  1. Python时钟代码——利用python turtle实现模拟时钟
  2. 计算机命令指示符大全,常用CMD命令提示符大全:让你玩转Win7系统“运行命令”!...
  3. SATA硬盘有固件问题的硬盘型号以及购买建议
  4. 转换vcf文件到csv文件的python脚本
  5. 软件测试工具Winrunner使用的技巧
  6. nds linux模拟器下载,NDS模拟器Desmume
  7. php adodb 统计,php之adodb简介
  8. C罗111球成国家队历史射手王,破纪录的动力来自签约曼联
  9. android蓝牙动态权限,Android蓝牙权限
  10. 《锋利的jQuery》再次阅读及摘要