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

ZT 针对接口编程而不是针对实现编程的更多相关文章

  1. 对“针对接口编程,而不是针对实现编程”的理解

    今天在阅读<Head First设计模式>的时候,看到了这句话:"针对接口编程,而不是针对实现编程",第一次见到的时候,不太清楚作者想表达的意思,想着到后来看看实例就懂 ...

  2. 针对接口编程能帮助达到面向对象开发和设计中"低耦合"的要求. 某公司...打印机...(笔试中遇到的题目)

    针对接口编程能帮助达到面向对象开发和设计中"低耦合"的要求.         举个例子:某公司有一台特殊打印机,还可以使用一年,一年后可能换为另一种打印机,这两种打印机都特殊而贵. ...

  3. struts2针对mvc的框架 spring针对解耦与事务的框架

    struts2针对mvc的框架 spring针对解耦与事务的框架

  4. 设计模式之Programming to an Interface, not anImplementation 程序指向接口,而不是实现

    Class inheritance is basically just a mechanism for extending an application's functionality by reus ...

  5. python学习之flask接口开发,环境变量扩展,网络编程requests

    python基础 flask之mock接口 所谓mock接口,其实就是我们在正式接口还没联调或者是测试接口没有正式使用时,自己创建一个模拟接口,来供项目暂时打通功能或者测试流程梳理的桥梁,而我们这儿使 ...

  6. 我面向 Google 编程,他面向薪资编程

    面试官:同学,说一说面向对象有什么好处? 神仙开发者:我觉的面向对象编程没有什么好处. 面试官:为什么(摊手.问号脸)? 神仙开发者:因为在面向对象的时候,我对象总是跟我说话,问我在淘宝上挑的衣服哪个 ...

  7. [.net 面向对象编程基础] (2) 关于面向对象编程

    [.net 面向对象编程基础]  (2)  关于面向对象编程 首先是,面向对象编程英文 Object-Oriented Programming 简称 OOP 通俗来说,就是 针对对象编程的意思 那么问 ...

  8. 学习响应式编程 Reactor (1) - 响应式编程

    响应式编程 命令式编程(Imperative Programing),是一种描述计算机所需做出的行为的编程范式.详细的命令机器怎么(How)去处理以达到想要的结果(What). 声明式编程(Decla ...

  9. 5天玩转C#并行和多线程编程 —— 第五天 多线程编程大总结

    5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 —— 第一天 认识Parallel 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq 5天玩转C#并行和多线程编 ...

随机推荐

  1. poj 3601 Tower of Hanoi

    Tower of Hanoi Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 1853   Accepted: 635 De ...

  2. javascript进行base64加密,解密

    function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr ...

  3. Centos 从零开始 (二)

    因为我是搞 nodejs的 所以以后会安装一些依赖于node的 比如mongodb数据库等. 6:安装nodejs 安装的时候遇到个小问题.yum install nodejs 报错 说没有这个包.然 ...

  4. System.Web.Mvc.HtmlHelper<dynamic>”没有名为“Partial”的适用方法,但似乎有一个具有该名称的扩展方法。扩展方法不能进行动态调度。请考虑强制转换动态参数,或调用该扩展方法但不使用扩展方法语法。

    MVC 调用分布式图,传了没有定义的参数,,参数写得不对

  5. mac安装rz,sz文件操作指令包

    安装需要具备什么样的环境? 1.安装item2 iterm2是一个与terminal一样的指令窗口 item2 下载地址,​​http://iterm2.com/downloads.html,下载后解 ...

  6. node版本的切换(转)

    大量开发者的贡献使Node版本的迭代速度很快,版本很多(横跨0.6到0.11),所以升级Node版本就成为了一个问题.目前有n和nvm这两个工具可以对Node进行无痛升级,本文简单介绍一下二者的使用. ...

  7. 阿里Java开发电话面试经历--惨败

    近期准备跳槽,想试试知名大企业--阿里.经过boss直聘上一些内部人员的内推,有幸获得了一次电话面试的机会.(虽然在面试开始之前就大概知道结果是如何,但是也总得试试自己个有多水,哈哈哈...) 跟大家 ...

  8. PLSQL-12.0.7.1837注册码

    product code: 4vkjwhfeh3ufnqnmpr9brvcuyujrx3n3le serial Number:226959 password: xs374ca LicenseNumbe ...

  9. Spring_Spring的特点

    一.非侵入式编程 Spring框架的API不会再业务逻辑上出现,即业务逻辑是POJO(Plain Ordinary Java Object).由于业务逻辑中没有Spring的API,所以业务逻辑可以从 ...

  10. php从身份证获取性别和出生年月

    //通过身份证号查询出性别与生日 $birth = strlen($idcard)==15 ? ('19' . substr($idcard, 6, 6)) : substr($idcard, 6, ...