java接口解耦效果的理解

先看一段代码 

public class A {
    public void say() {
        System.out.println("I am A");
    }
}
public class C {
    public void put(A a) {
        a.say();
    }
}

在C类里面想调用一个含有say功能的东西,就把A传入了,突然有一天,产品经理多了个需求,想让B这种类型也能在C中作为参数调用B的say,也即A,B这两种类型都能满足作为输入,

public class B {
    public void say() {
        System.out.println("I am B");
    }
}

那好烦,不仅要像上面一样新建B类,还要修改C的代码适配需求,例如改成下面这个样子,搞成重载的样子,万一产品经理又来要求把D,E,F...这些具有say功能的类可以当成参数输入,新建D,E,F这些类也就算了,难免嘛,问题是还要修改C的类,在里面再添加很多类似的修改,感觉耦合的很紧,代码写的太死板了,变动下需求就得改主程序C里面的代码,

public class C{
    public void put(A a) {
        a.say();
    }
    public void put(B b) {
        b.say();
    }
}

有没有其他的好办法?有,用接口的方法,例如下面

public interface IBase {
    void say();
}
public class A implements IBase {
    @Override
    public void say() {
        System.out.println("I am A");
    }
}
public class B implements IBase {
    @Override
    public void say() {
        System.out.println("I am B");
    }
}
public class C {
    public void put(IBase base) {
        base.say();
    }
}

定义一个接口,IBase,让产品经理新加的需求B,D,E,F都实现这个类,并且把C类里的参数写成接口的形式只要实现了我这个接口功能的都能传入),这样只要是实现了IBase接口的类,也即实现具备了实现接口say功能的任何类都可以传进来,所以以后只需要新建B,D,E,F时实现这个接口就行了,不需要在C类里面修改源代码。

这就大大降低了工作量,本质上就是降低了耦合度,体现了接口的解耦效果,这是一点关于对接口解耦作用的理解

 

参考博客:

https://blog.csdn.net/sun8112133/article/details/81040275

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值