• ZT 针对接口编程而不是针对实现编程


    java中继承用extends 实现接口用 implements

     

    针对接口编程而不是针对实现编程

    2009-01-08 10:23 zhangrun_gz | 分类:其他编程语言
    老听说这句,不知道到底要怎么理解。也查了不少资料,还是难以驾驭,有高手给讲解下(越详细越好)。谢谢。
    为什么都不说说针对实现编程呢?


    首先你要清楚什么是接口。接口就是标准。生活中有很多接口。如水龙头水管接口、电源接口等。
    现在有很多的水龙头生产商,在采用接口之前,厂商要同时提供水龙头和下水管,它们是一体的,不能变更。同时也只适用于他的这一种产品。而有了接口之后,厂商就就不用去管它的下水管如何设计了,只用安装接口标准来生产水龙头,完成后直接接到下水管上就可以了。这就是面向接口。
    这样的话你的下水管就可以使用所有的符合下水管标准的水龙头,而不是之前的一种水龙头。而且更换水龙头更加的方便。

    放在程序中说就是。如果一个类不能确定它最后的类型,就是说不知道它以后要被实现成什么样,就可以采用面向接口的编程。所有需要这个类的地方都设成一个接口,而让这个类继承这个接口。后期要更改的时候只用继承这个接口就可以了。
    如 你的方法是 public void doSomething(IServer ser);参数是一个接口
    public interface IServer{
    //something
    }
    然后你就可以写很多不同的类来实现这个接口
    如public class a implements IServer{
    //something
    }
    public class b implements IServer{
    //something
    }

    然后你的方法就可以这样调用了。

    doSomething(a);
    doSomething(b);
    这样都是可以的~不知道你理解没~
     
    倒数第3句话怎么理解:"从某个角度却反而成了它的弱点."
    从哪个角度说 ?弱点是什么 ?




    你接着往后读

    因为这个设计如此明显,你可能因此 .....

    这不就是它的弱点么?

    换句话说,你直接就像到用虚函数,别的方案就没管了,或许别的方案才是更合适的方案呢
    
    
    引用 楼主   的回复:
    倒数第3句话怎么理解:"从某个角度却反而成了它的弱点."
    从哪个角度说 ?弱点是什么 ?
    我在实际工作中,这个确实深有体会,有时候确实继承不是好的设计。不管继承还是其他设计其实是为了封闭变化。楼主这里,就是不同的游戏角色有不同的算法。使用oo思想,就是搞个虚函数。
    如果游戏角色就是几种,还好,这样设计也行,如果游戏的角色非常多,几百种,各种职业的,几百个类,每个都继承实现一下基类,几百种实现中,可能好多的有 重复的,这样设计就不行了。代码重复性高,利用性不强,我想书上说的好的设计,往往指,在类中另外一种health算法的类,各种health子类再分化 计算血的算法,这样就能将不变化的的部分提取出来。
    一句话,争对接口编程,不是实现 。
    java中继承用extends 实现接口用 implements
  • 相关阅读:
    Sample Page
    3.21之前刷题总结
    存储过程动态组建查询where语句
    SQL常备知识
    学习SilverLight:(1)SilverLight3.0和JavaScript交互
    SQL SERVER 2005 Tempdb
    学习atlas
    sql server系统表详细说明(转)
    js 基数排序的过程
    vuerouter 刷新页面后 url地址不变 参数还在 保留当前页 routerlink取值 this.$route
  • 原文地址:https://www.cnblogs.com/jeanschen/p/3503790.html
Copyright © 2020-2023  润新知