[Java] 完全解耦

今天在看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 也能产生相同的效果

适配器设计模式 不过是 基于你遇上了无法修改的代码时 做出的选择。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值