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. Junit参数化

    数据驱动测试:测试代码要与测试数据分离 哎~~学习时发现一个问题,写完了测试文件,右击文件时没有run as ->junit test的选项,找了好半天,终于知道了原因,是方法前没有加stati ...

  2. java.utils.UUID类介绍

    1 UUID介绍 UUID (Universally Unique Identifier)缩写,即通用唯一识别码,也是被开源软件基金会 (Open Software Foundation, OSF) ...

  3. 有意思的shader案例

    屏幕水波效果 https://blog.csdn.net/puppet_master/article/details/52975666

  4. unity2018使用tileMap生成地图 类似泰拉瑞亚创建和销毁地图块

    参考网站:https://blog.csdn.net/pz789as/article/details/79540890 using System.Collections; using System.C ...

  5. java中的各种命令参数

    java中有很多命令参数,这些命令参数有些是控制jvm行为的,有的则是供应用程序使用.我所了解的参数主要有三种,现在说一说这三种类型的参数. (1)命令行参数. 命令行参数就是类似与c语言的命令行参数 ...

  6. 正则表达式识别字符串中的URL

    一般我们经常看到一些在帖子或者别人的文章里,文字中间还会夹带着很多的网址还有URL而且URL还是可以点击进去的:还有另外一个较常用到的地方就是聊天系统中识别对话的URL,废话不多说,入正题请看下面的代 ...

  7. log4net.xml

    <?xml version="1.0" encoding="UTF-8"?> <log4net> <root> <le ...

  8. 第五章 使用java实现面向对象异常

    第五章 异常 一.异常概述 概述:异常是在程序的运行过程中所发生的不正常的事件,他会中断正在运行的程序 二.异常处理 1.关键字:try catch finally throw throws 2.Tr ...

  9. Azure 上 Linux 虚拟机 Mac 地址的持久化

    有些用户在使用 Azure Linux 虚拟机安装软件时,有些软件的 license 会和当前系统的 mac 地址绑定,那么在 Azure VM 重启,reszie(改变尺寸大小),停止然后再启动的时 ...

  10. JavaScript之parseInt()数值转换常被忽略的问题

    使用parseInt()你可以从字符串中获取数值,该方法接受另一个基数参数,这经常省略,但不应该.当字符串以”0″开头的时候就有可能会出问题,例如,部分时间进入表单域,在ECMAScript 3中,开 ...