6大设计原则(6):开闭原则

开闭原则是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个原则。

版权声明:本文为博主原创文章,未经博主允许不得转载。

然后拍一些美得想哭的照片,留给老年的自己。

6大设计原则(6):开闭原则

相关文章:

你感兴趣的文章:

标签云: