标签:
翻译过来就是:“软件实体应当对扩展开放。对改动关闭”。
这句话说得稍微有点专业,我们把它讲得更通俗一点,也就是:软件系统中包括的各种组件,比如
模块(Modules)、类(Classes)以及功能(Functions)等等。应该在不改动现有代码的基础上,引入新功能。开闭原则中“开”。是指对于组件功能的扩展是开放的,是同意对其进行功能扩展的;开闭原则中“闭”,是指对于原有代码的改动是封闭的,即不应该改动原有的代码。
为什么没有说是面向对象6大原则,为什么没有将开闭原则包含进去?
开闭原则是最基础的一个原则,前面5个原则就是它的详细形态,开闭原则才是他们的接口。
IBook作为一个接口。里面有三个方法,而小说NovelBook是一个详细的实现类,是全部小说的总称,BookStore指的是书店。
public interface IBook {
public String getName();
public int getPrice();
public String getAuthor();
}public class NovelBook implements IBook {
private String name;
private int price;
private String autor;
public NovelBook(String name,int price,String autor){
this.name=name;
this.price=price;
this.autor=autor;
}
public String getAuthor() {
return this.autor;
}
public String getName() {
return this.name;
}
public int getPrice() {
return this.price;
}
}public class Store {
private final static ArrayList<IBook> booklist = new ArrayList<IBook>();
static { // 静态模块载入数据,实际项目一般由持久层完毕
booklist.add(new NovelBook("巴黎圣母院", 3200, "雨果"));
booklist.add(new NovelBook("悲慘世界", 5600, "雨果"));
booklist.add(new NovelBook("天龙八部", 4800, "金庸"));
booklist.add(new NovelBook("挪威的森林", 2200, "村上春树"));
}
public static void main(String[] args) {
NumberFormat format = NumberFormat.getCurrencyInstance();
format.setMaximumFractionDigits(2);
System.out.println("-------------书店卖出去的书籍记录例如以下---------------");
for (IBook book : booklist) {
System.out.println("书籍名称:" + book.getName() + "\t书籍作者:"
+ book.getAuthor() + "\t书籍价格:"
+ format.format(book.getPrice() / 100.0) + "元");
}
}
}待定!
public class OffNovelBook extends NovelBook {
public OffNovelBook(String name, int price, String autor) {
super(name, price, autor);
}
@Override
public int getPrice() {
int price=super.getPrice();
int oprice=0;
if(price>4000){
oprice= price*90/100;
}else{
oprice= price*80/100;
}
return oprice;
}
}static { // 静态模块载入数据。实际项目一般由持久层完毕
booklist.add(new NovelBook("巴黎圣母院", 3200, "雨果"));
booklist.add(new NovelBook("悲慘世界", 5600, "雨果"));
booklist.add(new NovelBook("天龙八部", 4800, "金庸"));
booklist.add(new NovelBook("挪威的森林", 2200, "村上春树"));
booklist.add(new OffNovelBook("唐诗三百首", 4500, "谁写的"));
}
public interface IComputerBook extends IBook {
public String getScope();
}public class ComputerBook implements IComputerBook {
private String name;
private int price;
private String autor;
private String scope;
public ComputerBook(String name, int price, String autor, String scope) {
this.name = name;
this.price = price;
this.autor = autor;
this.scope = scope;
}
public String getScope() {
return this.scope;
}
public String getAuthor() {
return this.autor;
}
public String getName() {
return this.name;
}
public int getPrice() {
return this.price;
}
}static { // 静态模块载入数据,实际项目一般由持久层完毕
booklist.add(new NovelBook("巴黎圣母院", 3200, "雨果"));
booklist.add(new NovelBook("悲慘世界", 5600, "雨果"));
booklist.add(new NovelBook("天龙八部", 4800, "金庸"));
booklist.add(new NovelBook("挪威的森林", 2200, "村上春树"));
booklist.add(new OffNovelBook("下架的书", 4500, "谁写的"));
booklist.add(new ComputerBook("大数据入门", 8500, "李老师", "大数据"));
booklist.add(new ComputerBook("嵌入式精髓", 2600, "吴老师", "嵌入式"));
}
控制反转,使用底层的反射来写的。
參考书籍《设计模式之禅》
我是菜鸟,我在路上。
标签:
原文地址:http://www.cnblogs.com/lcchuguo/p/5395061.html