开闭原则通过新增代码,避免通过修改原有代码实现产品迭代
开闭原则要贯穿在软件开发的各个层级中,要利用在每一个方法中,由方法组成的类中,由功能密切的类组成的模块中,由相互依存的模块组成的项目中。
解决俩个问题:
- 新增业务需要修改原有代码
- 随着业务增加,判断语句的暴增问题
- 保持软件产品的稳定性
- 不影响原有测试代码的运行
先写个工厂接口,预知未来可能的变化,需要生产线方法,如下:
public interface IFactory {
String prodLine();
}
满足客户1的工厂FactoryA实现IFactory,生产产品A,如下:
public class FactoryA implements IFactory{
@Override
public String prodLine() {
return "产品A";
}
}
对于客户1中的代码:
public class Client1 {
public static void main(String args[]) {
System.out.println("我订购并收到产品:"+order());
}
private static String order(){
IFactory factory = new FactoryA();
return factory.prodLine();
}
}
客户1中持有工厂接口IFactory的引用,指向其实现类,
运行之后,可以满足客户1的需求:
我订购并收到产品:产品A
现在公司需要拓展业务满足客户2的需求,只需添加一个工厂接口IFactory的实现类,生产B产品,如下:
public class FactoryB implements IFactory {
@Override
public String prodLine() {
return "产品B";
}
}
客户B中的代码
public class Client2 {
public static void main(String args[]) {
System.out.println("我订购并收到产品:"+order());
}
private static String order(){
IFactory factory = new FactoryB();
return factory.prodLine();
}
}
运行后,可以满足客户B的需求
我订购并收到产品:产品B
这样相当于公司为每一位客户,私人订制了一个工厂,专门生产其所需要的产品,丝毫不受生产其他产品的影响,而且是保密生产,客户2所需的产品B,对于客户1是不可见的,绝对的客户利益至上。