开闭原则的含义是对扩展开放,对修改关闭。
意思就是在遇到新的需求或者变动的时候,提倡对原代码扩展使其满足新的需求,不提倡修改原代码来达到目的。
一个项目不可能在开发完毕后就一成不变了,它总会有新的需求或者对老的需求进行更新。这样就要尽可能的遵从设计原则中的开闭原则,这个原则告诉我们,要尽量避免对原代码的修改,而是要根据新的需求,来扩展现有的代码达到系统完善的目的。
比如现在和金融挂钩的项目,多少会涉及资金方,来完成金融贷款等业务。起始设计的时候资金方很可能只有一两个,当新增资金方的时候,就添加一个资金方的实现,无需对金融贷款等业务进行修改,只需要在原代码的基础上进行扩张就能实现。
书籍接口
public interface IBook {
public String getName();
public String getAuthor();
public int getPrice();
}
书籍接口实现
public class IBookImpl implements IBook{
private String name;
private String author;
private int price;
public IBookImpl(String _name, String _author, int _price) {
this.name = _name;
this.author = _author;
this.price = _price;
}
@Override
public String getName() {
return this.name;
}
@Override
public String getAuthor() {
return this.author;
}
@Override
public int getPrice() {
return this.price;
}
}
双十一书籍新增打折需求,只需要重写getPrice方法
public class Book extends IBookImpl{
public Book(String name,String author,int price){
super(name,author,price);
}
@Override
public int getPrice() {
int oldPrice = super.getPrice();
int newPrice = 0;
if (oldPrice <= 20){
newPrice = oldPrice * 90 / 100 ;
}else {
newPrice = oldPrice * 50 / 100 ;
}
return newPrice;
}
}
测试
public class BookStore {
private static final List<Book> bookList = new ArrayList<>();
static {
bookList.add(new Book("西游记","吴承恩",10));
bookList.add(new Book("红楼梦","施耐庵",20));
bookList.add(new Book("水浒传","罗贯中",50));
}
public static void main(String[] args) {
for (Book book : bookList) {
System.out.println("书籍名称: " + book.getName()
+"\t书籍作者: "+book.getAuthor()
+"\t书籍价格: "+book.getPrice());
}
}
}
书籍名称: 西游记 书籍作者: 吴承恩 书籍价格: 9
书籍名称: 红楼梦 书籍作者: 施耐庵 书籍价格: 18
书籍名称: 水浒传 书籍作者: 罗贯中 书籍价格: 25
优点
开闭原则提高了系统的可维护性和代码的重用性。
利用开闭原则进行开发,我们可以随时的对功能进行扩展,这样就提高了系统的灵活性和可维护性,还有就是在原代码不改动的情况下进行开发,增强了系统的稳定性。