面向接口编程就是面向抽象编程、面向规范编程,它带来的最大的好处便是解耦、增强扩展性、屏蔽变化
举例:非单例的情况,侧重于强调[扩展性强]
//命令接口
public interface ICommand{
void doCommand();
}
//命令1
public class Command1 implements ICommand{}
//命令2
public class Command2 implements ICommand{}
//命令执行器
public class CommandExecutor{
public void execute(ICommand command){
//略
}
}
//命令工厂
public class CommandFactory{
ICommand getCommand(string type){
//通过type查询配置文件,然后反射创建Command
}
}
public class Client{
public static void main(String args[]){
CommandFactory f=new CommandFactory();
ICommand c1 = f.getCommand("1");
ICommand c2 = f.getCommand("2");
CommandExecutor ce = new CommandExecutor();
c.execute(c1);
c.execute(c2);
}
}
CommandExecutor的execute方法不关心是传过来的是什么命令,只管执行。
增加新的命令实现类,对CommandExecutor没有任何影响。
举例二:单例时的情况 ,侧重于强调[屏蔽变化]
1、最最常见的DAO模式,程序运行的时候针对一个DAO接口只有一个实现存在于jvm中,这种情况下虽然在运行时无法实现接口和实现的一对多关系,但当某天需要针对另一种数据库进行移植的时候,只需要DAO的实现发生变化即可,调用DAO的Service层不用任何变化。
2、还有最最常用的Servlet,我们在编写自己的Servlet程序的时候,用的是HttpServletRequest接口和HttpResponse接口而不是具体的实现,那么我们的程序可以运行于Tomcat上,可以运行于Jetty上,可以运行于WebLogic上,而无需任何更改、变化。