1:浅谈set,get方法
任何写java的人都用过上面2个方法,至于为什么,想必每个人都有自己的理解吧?
看下面的例子中的注释:
public class Ppt {
//1直接new 具体对象
//FastSot fastSot = new FastSot();
//2使用接口,直接new 接口的子类
//FastSotF fastSotF = new fastSot();
//3配置接口,采用set方法运行时设置值
FastSotF fastSotF;
public FastSotF getFastSotF() {
return fastSotF;
}
public void setFastSotF(FastSotF fastSotF) {
this.fastSotF = fastSotF;
}
}
第一种方式中,直接new对象,肯定是最差的方式,比如需要新建一个功能或实现,需要修改1处的代码
第二种方式比第一种稍好,采用接口,添加新功能的时候,只需要添加一个新的实现类,修改一点代码,但是还是要修改代码,存在着代码耦合
那么采用第三种方式,我们添加新功能的时候,只需要添加新的实现类,采用set方法设置添加的实现类。不要修改任何代码。由此可见这里就不存在任何耦合。
总结:第三种方式就是设计模式中的策略模式。
目的是解耦,用到了java的动态运行时绑定具体实例。
能使用接口请优先使用接口。
说解耦其实很简单,就是减少代码之间的相互关联,利于以后的扩展。有很多种实现方式,以后遇到了,我会一点一点加上去。
2:策略模式
不直接创建对象,运行时动态绑定实例。
3:关于spring的依赖注入和控制反转
由上面来解释依赖注入:不直接创建对象,运行时动态绑定实例。
控制反转:上面的例子中,我们并没有直接创建实例,那spring怎么创建呢?
我们经常看见配置文件:
<bean id=“sessionFactory” ....../>
具体类:
class ;..{
SessionFactory sf ;
//set get
}
我们声明了如何创建实例以及什么样的实例,和实例相关的信息,spring根据配置信息创建和用类的set方法注入到具体需要中。
如果我们需要采用另外一种sf的实现方式,那么只要在配置文件(或者注释)中新建一个bean替换原来的bean就可以了。根本不要修改任何代码,这就可以完全实现解耦。
总结:我们为什么要推荐使用接口?因为可以用子类来动态绑定,利于扩展和代码解耦。
上面是在下的肤浅认识,如有错误请指正。
切勿全相信楼主所说!