要面向接口编程?

面向对象还是面向接口

  • 在我们学习java的时候,我们一直在说java是面向对象编程,这个思想在我的脑子里也是根深蒂固.但是这个只是在写代码的阶段,等我们进入企业之后,我们更多的会听到人说面向接口编程.面向接口编程在我们生活中也是有很多实例.比如插座,为什么所有的插座能做到究极统一,可以支持所有的人用.这就是因为插座在生产的时候是按照统一的标准来生产的,这个标准就可以理解为我们的接口思想.

代码实现

  • 比如我现在是一个饭店的老板,我的饭店主要经营的是川菜和陕菜,
public class FoodTwo {
    public void cook(){
        //陕菜对象
        System.out.println("陕菜");
    }
}
public class Food {
    public void cook(){
        //川菜对象
        System.out.println("川菜");
    }
}
  • 菜有了,我找了个这两种菜系都会做的厨子
public class CookUser{
    public void cook(Food food){
        //厨师做川菜的方法
        food.cook();
    }
    public void cook(FoodTwo foodTwo){
        //厨师做陕菜的方法
        foodTwo.cook();
    }
}
public static void main(String[] args) {
        //两个菜对象
        Food food = new Food();
        FoodTwo foodTwo = new FoodTwo();
        //厨师对象
        CookUser cookUser = new CookUser();
        //厨师做饭的两个方法
        //做川菜的
        cookUser.cook(food);
        //做陕菜的
        cookUser.cook(foodTwo);
    }
  • 万事俱备,饭店开张了,但是过了几天,来了一个小伙子要点粤菜,我们厨师不会做.那这个时候就要想办法了,有钱不赚不是老板的风格啊.这块可以写一个做菜的抽象类,然后厨师实现我这个抽象类就可以实现做菜了.
public abstract class ChineseFood {
    /**
     * 做菜的抽象方法,继承这个类实现这个方法,就可以做任何中国菜
     */
    public abstract void cook();
}
  • 有了这个之后,只要是中国菜都可以做,粤菜做出来就轻而易举了
public class FoodThree extends ChineseFood{

    @Override
    public void cook() {
        System.out.println("做粤菜");
    }
}
  • 然后又营业了几个月,没一点问题,但是这天来了个外国友人,想吃牛排.那我们肯定不能说不会啊,要不然就被嘲笑了.但是我一想我的厨师虽然上次升级了,但是还是只会做所有的中国菜啊.几经思考,来一个食物的接口,里面有一个做饭方法,不关你是啥饭,只要是吃的,我都能给你做出来
public interface AllFood {
    /**
     * 这个是做饭的抽象方法,只要是吃的,都可以做
     */
    public abstract void cook();
}
public class Cattle implements AllFood{
    @Override
    public void cook() {
        System.out.println("做牛排");
    }
}
  • 这个时候厨子也不用上面那么复杂的继承等一系列操作了,想做什么菜,就让这个菜实现食物接口,然后让厨师面向接口编程就好了
public class CookUser{
    public void cook(AllFood allFood){
        //让厨师面向接口来编程
        allFood.cook();
    }
public class Cattle implements AllFood{
    @Override
    public void cook() {
        System.out.println("做牛排");
    }
}
public static void main(String[] args) {
        //两个菜对象
        Food food = new Food();
        FoodTwo foodTwo = new FoodTwo();
        //厨师对象
        CookUser cookUser = new CookUser();
        //厨师做饭的两个方法
        //做川菜的
        cookUser.cook(food);
        //做陕菜的
        cookUser.cook(foodTwo);
        //注意这个做牛排是我直接加上的,牛排实现了接口,所以厨师就会做牛排了
        cookUser.cook(new Cattle());
    }
  • 这个可能还不太明显,那现在有一个甜品大赛,我要派人参加,但是我只有一个厨子,厨子只会做菜啊,但是一想,甜品也可以吃,那就简单了,写一个甜品类让他实现食物接口,然后我的厨子就会做了
public class Sweet implements AllFood{
    @Override
    public void cook() {
        System.out.println("做甜品");
    }
}
	//做甜品也是手到擒来
	cookUser.cook(new Sweet());
  • 这样只要是吃的,我的厨子都可以做,相比于上面我加个粤菜就要对原来的代码一顿改的操作,用接口来处理我没有改原来的代码,你想吃啥,就重新来个类,只要符合我这个接口,就可以给你做出来.

总结

  • 我觉得面向接口编程在项目量很大的时候,能发挥出意想不到的的效果,因为他的代码维护或者扩展起来都很方便,就像插座一样,一个标准大家共用,极大地减少了代码之间的耦合性.
  • 但是我觉得面向接口的思想也是建立在面向对象的基础之上来实现的.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值