敏捷软件开发总结——开放-封闭原则(OCP)
开放-封闭原则(OCP)的意义
任何系统在其生命周期中都会发生变化,那么怎样的设计才能面对需求变化而保持相对稳定?著名的开放-封闭原则(OCP)为我们提供了指引。
如果程序中的一处改动就会造成连锁反应,导致一系列相关模块改动,那么设计就具有僵化性。OCP建议我们对此重构,这样以后改动就只需要添加新的代码,而不必修改已经正常运行的代码。
关键是抽象
策略(Strategy)模式和模板方法(Template Method)模式是满足OCP的最常用方法。
策略(Strategy)模式
模块可以调用一个抽象接口,由于模块依赖于一个固定的抽象接口,所以对于它的更改可以是封闭的。同时通过创建派生类实现该抽象接口,该扩展则是开放的。这就是典型的策略(Strategy)模式。
例:
public class Context {
//持有一个具体策略的对象
private Strategy strategy;
/**
* 构造函数,传入一个具体策略对象
* @param strategy 具体策略对象
*/
public Context(Strategy strategy){
this.strategy = strategy;
}
/**
* 策略方法
*/
public void contextInterface(){
strategy.algorithmInterface();
}
}
public interface Strategy {
/**
* 策略方法
*/
public void algorithmInterface();
}
public class ConcreteStrategyA implements Strategy {
@Override
public void algorithmInterface() {
//相关的业务
}
}
public class ConcreteStrategyB implements Strategy {
@Override
public void algorithmInterface() {
//相关的业务
}
}
public class ConcreteStrategyC implements Strategy {
@Override
public void algorithmInterface() {
//相关的业务
}
}
模板方法(Template Method)模式
准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。