今天在看Thinking in Java的时候 遇上的小问题 查了一些资料 做一个小整理。
先说 耦合性 耦合性就是对 对象的依赖程度。依赖程度高 叫做高耦合,依赖程度低叫做低耦合。我们可以通过Java自带的接口和Spring的IOC来降低程序的耦合性,也是好的程序所追求的。
举个例子,一个程序需要一种水果,你可以传苹果,橘子什么的进去。这叫低耦合。
一个程序只需要苹果,你穿橘子进去是错的,这叫高耦合。
然后来讲接耦。这里主要讲适配器设置模式。
适配器设置模式 通过代理的方式 在自己的类中创造方法调用传入参数的方法。
下面看代码
//很普通的一个类 作为基类
package Interface;
public class filter {
public String name(){
return getClass().getSimpleName();//返回类姓名
}
public String process(String s){
return s;
}
}
//继承filter的filter1
package Interface;
public class filter1 extends filter {
public filter1(){
System.out.println("I am filter1");
}
}
//继承filter的filter2
package Interface;
public class filter2 extends filter{
public filter2(){
System.out.println("I am filter2");
}
}
filter1 和 filter2是带回传给我们适配器的参数 来体现出低耦合性用的。
//一个借口 用来给适配器implements用的
package Interface;
public interface processer {
public Object process(Object item);
}
//适配器 可以看出 我们没有直接粗暴地使用f.process()用在main函数里
package Interface;
public class filterapdapter implements processer {
filter f;
public filterapdapter(filter f){
this.f = f;
}
public String process(Object item){
return f.process((String)item);
}
}
//main
package Interface;
public class coupling {
static void process(processer p,String s){
System.out.println(p.process(s));
}
public static void main(String argv[]){
String s = "test";
process(new filterapdapter(new filter1()),s);
process(new filterapdapter(new filter2()),s);
}
}
从coupling.java中 我们就可以看出 coupling.process()需要调用一个implements借口 这个我们通过 适配器 传入 然后 再通过适配器 调用我们需要的filter.process()
我们可以把filter1 和 filter2 传参 传进去 体现了 低耦合 。
同时可见 这里的filter并没有与Interface发生联系 而是 巧妙地通过一个filteradapt适配器产生了一个嫁接的桥梁
当然有一种更简单的方法 就是强行把filter1,filter2 implements Interface 也能产生相同的效果
适配器设计模式 不过是 基于你遇上了无法修改的代码时 做出的选择。