开闭原则:开闭原则就是说对扩展开放,对修改关闭。
依赖倒置原则:这个是开闭原则的基础,针对接口编程,依赖于抽象而不依赖于具体。
以下摘取了之前自己写过的一个动态代码机工具,业务逻辑相关的代码都已过滤掉,重构前代码是这样的:
使用者调用起来也很简单,
public static void main(String [] args){
CodeGeneratorUtil cgu =new CodeGeneratorUtil();
cgu.generatorByDBTemplate();
}
此时如果扩展一项功能,比如可以根据用户录入的模板生成代码,那就需要修改CodeGeneratorUtil类了,如果在项目中这样写也是可以的,但是如果要做成框架,提供给其他用户调用,那就不合适了。
以下对代码进行了重构:
1. 首先定义一个ICodeTemplate接口,每扩展一类模板,就新增一个该接口的实现类。
2. 以下为数据库模板和FreeMark模板的实现类,如果要扩展用户录入的自定义模板,可以新增一个ICodeTemplate实现类,并实现接口中的方法。
3. 新增CodeGenerator类,组合ICodeTemplate接口,并通过调用其方法,实现代码的动态生成。
应用层这样调用
public static void main(String [] args){
CodeGenerator cg =new CodeGenerator();
cg.setiCodeTemplate(new FreeMarkCodeTemplate());
cg.generatorCode();
}
重构后遵循java设计的开闭原则和依赖倒置原则。