6大设计原则(6):开闭原则
来源:互联网 发布:淘宝双115元红包怎么用 编辑:程序博客网 时间:2024/06/05 07:00
开闭原则是Java世界中最基本的设计原则,它指导我们如何建立一个稳定的、灵活的系统。
定义:
一个软件实体,如类、模块和函数,应该对扩展开放,对修改关闭。
什么意思呢?
就是你写的这个类,或者是接口、函数,当因需求发生变化而要进行修改的时候,不应该去修改原代码,而是对原代码进行扩展。
举个书店售书的栗子:
interface IBook {// 获得书名public String getName();// 获得价格public int getPrice();// 获得作者public String getAuthor();}// 小说类class NovelBook implements IBook {private String name;private int price;private String author;public NovelBook(String name, int price, String author) {super();this.name = name;this.price = price;this.author = author;}@Overridepublic String getName() {return name;}@Overridepublic int getPrice() {return price;}@Overridepublic String getAuthor() {return author;}}public class Client {private final static ArrayList<IBook> BOOK_LIST = new ArrayList<IBook>();static {BOOK_LIST.add(new NovelBook("天龙八部", 3200, "金庸"));BOOK_LIST.add(new NovelBook("巴黎圣母院", 5600, "雨果"));BOOK_LIST.add(new NovelBook("悲惨世界", 3500, "雨果"));BOOK_LIST.add(new NovelBook("金瓶梅", 4300, "兰陵笑笑生"));}public static void main(String[] args) {NumberFormat format = NumberFormat.getCurrencyInstance();format.setMaximumFractionDigits(2);System.out.println("-----书店卖出去的书籍记录如下:-----");for (IBook book : BOOK_LIST) {System.out.println("书籍名称:" + book.getName() + "\t书籍作者:"+ book.getAuthor() + "\t书籍价格:"+ format.format(book.getPrice() / 100.0) + "元");}}}
需求有变化:所有40元以上的书9折出售,其他8折出售。
IBook作为接口应该是稳定可靠的,不应该经常发生变化。
修改实现类中的getPrice方法,这确实可以实现,但是却不符合开闭原则。
通过扩展实现变化:另写一个类 OffNovelBook继承NovelBook,复写getPrice方法。
class OffNovelBook extends NovelBook {public OffNovelBook(String name, int price, String author) {super(name, price, author);}@Overridepublic int getPrice() {int selfPrice = super.getPrice();int offPrice = 0;if (selfPrice > 4000) {// 40以上9折offPrice = selfPrice * 90 / 100;} else {// 其他8折offPrice = selfPrice * 80 / 100;}return offPrice;}}
场景类中的静态模块中做一下修改:
static {BOOK_LIST.add(new OffNovelBook("天龙八部", 3200, "金庸"));BOOK_LIST.add(new OffNovelBook("巴黎圣母院", 5600, "雨果"));BOOK_LIST.add(new OffNovelBook("悲惨世界", 3500, "雨果"));BOOK_LIST.add(new OffNovelBook("金瓶梅", 4300, "兰陵笑笑生"));}
开闭原则是一个非常虚的原则,前面5个原则是对开闭原则的具体解释,但却不局限于这5个原则。
0 0
- 设计模式--6大原则--开闭原则
- 设计模式6大原则:开闭原则
- 设计模式--6大原则--开闭原则
- 设计模式--6大原则--开闭原则
- 设计模式--6大原则--开闭原则
- 设计模式--6大原则--开闭原则
- 设计模式6大原则:开闭原则
- 设计模式--6大原则--开闭原则
- 设计模式--6大原则--开闭原则
- 6大设计原则(六)---开闭原则。
- 6大设计原则之开闭原则。
- 设计模式6大原则(6):开闭原则
- 6大设计原则(6):开闭原则
- 设计模式6大原则:开闭原则(OCP)
- 设计模式原则(6):开闭原则
- 设计模式之6大原则(6)开闭原则
- 设计模式6大原则之-开闭原则
- 【转】设计模式6大原则:开闭原则
- 三层交换机上多个VLAN的情况下DHCP是如何让指定VLAN获得你分配给它的IP的?
- Windows下安装moztrap
- java.sql.SQLException: ORA-00911: 无效字符 解决方案
- python- shutil 高级文件操作
- 简易版之最短距离
- 6大设计原则(6):开闭原则
- 三层交换机能当路由器用吗?
- Android学习笔记之AndroidManifest.xml文件解析 service
- apache poi解析word(doc)文档成xml及导出成html
- 用ZBar三方库生成和扫描二维码
- Android UI
- 关于word排版中公式居中,编号靠右的问题
- 无聊至极——六月总结
- poj1936 All in All