接口(多态)为什么能降低耦合?

1.什么是耦合?

通俗来讲,耦合就是绑定,要完成某件事,互相离不开对方。

2.接口解耦的过程讲解

接口解耦,实际上是面向对象的多态特性的应用。我们来举例说明解耦的过程。

以一个简单的喂食动物为例:现有一个动物饲养员,负责给动物喂食,动物看到食物完成进食。

假设我们要喂一只猫和一条狗,猫吃鱼,狗吃肉,下面分别用接口和非接口的方式实现上述过程:

2.1 非接口实现方式

根据面向对象的特性,整个过程涉及三个实体:饲养员、小动物

先将这三个实体抽象成Java对象

@Data
public class Cat{

    int size;
    public void eat(){

        System.out.println("cat is eating fish);    
    }
}
@Data
public class Dog{

    int size;
    public void eat(){

        System.out.println("dog is eating meat);    
    }
}
@Data
public class AnimalKeeper{

    int age;
    String name;
    public void feedCat(Cat cat){

        cat.eat();    
    }
    public void feedDog(Dog dog){

        dog.eat();    
    }
}

main方法中实现动物喂养过程:可见,喂养两个不同的动物,需要定义两个不同的方法,将对应的动物对象Cat和Dog传入,才能实现方法调用。

public class Main{
    public static void main(String[] args){
    
        AnimalKeeper keeper=new AnimalKeeper();
        Cat cat=new Cat();
        Dog dog=new Dog();
        keeper.feedCat(cat);
        keeper.feedDog(dog);
    }
}

2.2 接口实现方式

上述实现,方法feedCat和feedDog和对象Cat、Dog之间是耦合关系,我们引入一个Animal接口来解耦:

public interface Animal{
    eat();
}

猫狗分别实现该接口中的eat方法

@Data
public class Cat implements Animal{

    int size;
    @Override
    public void eat(){

        System.out.println("cat is eating fish);    
    }
}
@Data
public class Dog implements Animal{

    int size;
    @Override
    public void eat(){

        System.out.println("dog is eating meat);    
    }
}

注意看,饲养员类发生了变化:之前的feedCat和feedDog统一成了feed方法,参数变成了抽象的Animal类,代码简化了。相当于饲养员自己做了一个专门喂食动物的小盒子,只要把动物从门里放进去,就能完成喂食。

降低耦合的好处:不用接口,如果有100个动物,饲养员类中需要定义100个相应的喂食方法,如果是1000个,10000个呢?使用接口的话,不管有多少个动物,饲养员类中一个方法就能搞定了。

public class AnimalKeeper {
    int age;
    String name;
    public void feed(Animal animal)
    {
        animal.eat();
    }

}

main方法不变:

public class Main{
    public static void main(String[] args){
    
        AnimalKeeper keeper=new AnimalKeeper();
        Cat cat=new Cat();
        Dog dog=new Dog();
        keeper.feed(cat);
        keeper.feed(dog);
    }
}

涉及到的多态:用Animal对象接收Cat和Dog对象,完成多态。

普通的多态形式:

Animal animal=new Cat()、Animal animal=new Dog();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗=里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值