前言
相信有过开发经验的人都有过这种体验:让你接手一个的项目,2种情况。A.这个项目已经被好几个人,甚至好几代程序员开发维护过;B.这个项目等待你的全新开发。不给你设时间期限,你更愿意选择哪一个?我相信99.9%的人都会选择B这种开发模式。有木有??
Why?因为不想改一个bug引起n个bug。说到底,就是因为已有的项目架构没有做好,或者没有适时的做架构调整,假如你接手的是旧代码,可能为了添加一个功能,因为架构不具备扩展性,你也许只能在原有的基础上修改几行代码,甚至修改几百上千行代码来达到目的,以此来埋下诸多隐患待下一个接盘侠搞定。那么就引出了今天的话题?什么样的代码才具备可扩展性呢?
本文作者xiong_it,博客链接:http://blog.csdn.net/xiong_it。转载请注明出处。
本篇文章已授权微信公众号 guolin_blog(郭霖)独家发布.
Open Close Principle
OCP原则(开闭原则):一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
wtf???太抽象了!!!在笔者的理解中,OCP是6大原则的最高纲领,所以才如此抽象,晦涩难懂。用面向对象的语言来讲,OCP是一个最抽象的接口,而其余的5大原则只是OCP的子类接口,他们一起定义了OOP世界的开发标准,常用的23中设计模式更是只能算作这6大原则的实现抽象类,咱们开发的代码实践才是真正的具体子类。
public interface OCP {
void openExtention();
void closeModifiability();
}
Q:What is OCP?
A:OCP是啥咧?它告诉我们,咱们编写的代码应该面向扩展开放,而尽量不要通过修改现有代码来拥抱需求变更。这里,代码可以指的是一个功能模块,类,或者方法。
Q:Why do we need to follow this principle?
A:我们为什么要遵循OCP原则呢?地球人都知道代码后期需求变更的痛苦,如果不利用扩展来适应变更,那迎来的将是代码被修改的千疮百孔。
Q:How do we practice this principle?
A:我们如何实践这条原则?能用抽象类的别用具体类,能用接口的别用抽象类。总之一句:尽量面向接口编程。这里之所以说“尽量”是因为凡事都有度,别让你来个hello world你还给整个接口再实现。
talk is cheap,show your the code.
需求:老王开车去东北。
简单,开撸。
老王来了,大家藏好自己媳妇儿。
public class Laowang {
private Car car;
private DongBei dongbei;
...
getter() & setter()
...
public void drive() {
car.goto(dongbei);
}
}
要车就给你一辆咯
public class Car {
public void goto(DongBei dongbei) {
System.out.println(“要去东北咯,啦啦啦”);
// 模拟开车旅途消耗时间。10s就到东北了,开的可够快的啊