在oop中有一种设计原则是面向接口编程,面向接口编程有非常多优点,详细百度一大片。我来谈一下详细的使用中的一些不成熟的见解。!

首先面向接口编程能够消除类之间的依赖关系,使得业务仅仅依赖接口。

这样有什么优点呢?

这种优点大大的。比方说我们声明一个car的接口。我们对车有下面行为,我们能够开车。洗车,推车,修车,拆车等等,

详细用代码实现:

package com.panther.dong.faceinterface;

/**
* Created by panther on 15-8-9.
*/
public interface Car {
public void driveCar(); //开车
public void washCar();//洗车
public void fixCar();//修车
}

假如说我大学毕业了,工作了,发了工资了,有钱了,于是乎(有钱就得烧啊),买了一辆自行车!!我就能够开车,洗车。有时候车坏了,

一看饭吃不上了,就得自己修车了

package com.panther.dong.faceinterface;

/**
* Created by panther on 15-8-9.
*/
public class Bicycle implements Car {
@Override
public void driveCar() {
System.out.println("双手拿把,助攻两步。启动。加速~~~");
} @Override
public void washCar() {
System.out.println("买两张湿巾,给自行车做个保养");
} @Override
public void fixCar() {
System.out.println("车掉了链子。路边赵根棒棒。自己按链子");
}
}

上面代码实现了一辆自行车的基本行为(到如今自行车都买不起,只是能够想想以后,以后买了自行车会怎么样,有点小激动啊)。尽管是自行车,也算有车的人了,

上班同事问我怎么来的,我把头一抬,高傲的说:开车来的。!

这就是接口的一个优点,将实现封装,调用者不须要知道详细的实现就能够使用,仅仅要知道详细怎么用即可

代码内部实现能够隐藏,不用暴露出来,减少了代码的耦合性。

接着有一天下班同事一起走,看到我骑着的是自行车。哎,屌丝一个,我还以为是高富帅呢。你们是不是也遇到过,对,看一些源码的实现真是有点脱。只是用起来你就

无论它了!!

工作了10年攒了10w块钱,准备换车了,想了想挣钱不easy啊。还是不换了吧,接着有一个新颖大胆的想法,把自行车改成三轮车吧,接着把自行车大卸八块,买了个轮子,着了半天,钱也花了,自行车也废了,接着三轮车骑着老抛锚,哎。想死的心都有啊!

!(在原先的类中改来改去,搞得逻辑混乱。系统维护越来越差,最后搞的系统重构),这时候。没办法了,不能走着去上班啊,仅仅能买车了,把攒着娶媳妇的钱买了车,开车爽啊,

小汽车的行为代码:

package com.panther.dong.faceinterface;

/**
* Created by panther on 15-8-9.
*/
public class EngineCar implements Car {
@Override
public void driveCar() {
System.out.println("挂挡。加油,走起");
} @Override
public void washCar() {
System.out.println("花钱洗车。无奈");
} @Override
public void fixCar() {
System.out.println("师傅。换个轮胎,廉价点");
}
}

最后就能够上班了,可是自行车仅仅能卖废铁了,哪天小汽车坏了就得走着去上班了!!

所以面向接口编程的第二个优点就是当客户需求变化时,仅仅需编写该业务逻辑的新的实现类(买小汽车),通过更改配置文件(比如Spring框架)中该接口的实现类就能够完毕需求。不须要改写现有代码,降低对系统的影响。

我如今就体会到这两个优点,以后体会到别到优点再谈!!。!~~~~~~

java面向接口编程的更多相关文章

  1. Java面向接口编程,低耦合高内聚的设计哲学

    接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极大的降低程序中各个模块之间的耦合,提高系统的可维护性以及可扩展性. 因此,很多的软件架构设计理念都倡导"面向接口编程"而 ...

  2. Java中的面向接口编程

    面向接口编程是很多软件架构设计理论都倡导的编程方式,学习Java自然少不了这一部分,下面是我在学习过程中整理出来的关于如何在Java中实现面向接口编程的知识.分享出来,有不对之处还请大家指正. 接口体 ...

  3. JAVA面向接口的编程思想与具体实现

    面向对象设计里有一点大家已基本形成共识,就是面向接口编程,我想大多数人对这个是没有什么觉得需要怀疑的.        问题是在实际的项目开发中我们是怎么体现的呢? 难道就是每一个实现都提供一个接口就了 ...

  4. java接口,接口的特性,接口实现多态,面向接口编程

    package cn.zy.cellphone; /**接口是一种引用数据类型.使用interface声明接口,形式 * 形式:public interface 接口名称{} * 接口不能拥有构造方法 ...

  5. javascript设计模式学习之十七——程序设计原则与面向接口编程

    一.编程设计原则 1)单一职责原则(SRP): 这里的职责是指“引起变化的原因”:单一职责原则体现为:一个对象(方法)只做一件事. 事实上,未必要在任何时候都一成不变地遵守原则,实际开发中,因为种种原 ...

  6. go 学习笔记之万万没想到宠物店竟然催生出面向接口编程?

    到底是要猫还是要狗 在上篇文章中,我们编撰了一则简短的小故事用于讲解了什么是面向对象的继承特性以及 Go 语言是如何实现这种继承语义的,这一节我们将继续探讨新的场景,希望能顺便讲解面向对象的接口概念. ...

  7. Python 中的面向接口编程

    前言 "面向接口编程"写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重要,甚至几乎所有的编程语言都需要,毕竟程序具有良好的扩展性.维护性谁都不能拒绝 ...

  8. Java 面向接口的编程

    面向接口的编程 什么是面向接口编程呢?我个人的定义是:在系统分析和架构中,分清层次和依赖关系,每个层次不是直接向其上层提供服务(即不是直接实例化在上层中),而是通过定义一组接口,仅向上层暴露其接口功能 ...

  9. 【GoLang】golang 面向对象编程 & 面向接口编程

    005.面向对象&接口编程 1 面向函数编程 1.1 将数据作为参数传递到函数入参 1.2 对象与函数是分离的 2 面向对象编程 2.1 使用者看起来函数作为对象的属性而非参数 2.2 函数属 ...

随机推荐

  1. python自动化测试学习笔记-2-列表

    上次我们学习了python的基本概念,了解了python的变量及数据类型,并实战了条件判断,for/while循环,字符串输出,格式化输出的一些基本用法,接下来我们继续学习其他的一些数据类型. pyt ...

  2. [Luogu 1052] noip 05 过河

    [Luogu 1052] noip 05 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是 ...

  3. service里设置websocket心跳并向fragment发送数据

    垃圾小白写了自己看的 /** * service 文件 */ public class SocketService extends Service { //自己定义接口用来传参 private sta ...

  4. 如何防止SQL注入式攻击

    一.什么是SQL注入式攻击?  所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或 ...

  5. (转)Arcgis for javascript实现百度地图ABCD marker的效果

    概述: 在我的博客中,有一篇相关的文章,这段时间,有很多人问我求源码,只是时间过去已长,源代码已找不到,乘着这个9.3放假,又重新实现了下,并相关代码做了优化,在此贴出来,方便大家使用. 相关文章地址 ...

  6. Jenkins里jobs和workspace什么区别

    https://segmentfault.com/q/1010000012575095/a-1020000012590560 简单的说,job 中保存的是项目是在 jenkins 上的配置.日志.构建 ...

  7. CentOS6.9下NFS配置说明(转载)

    NFS是Network File System的缩写,即网络文件系统.它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端可以通过挂载(mount)的方式将NFS ...

  8. mysql跟java时间类型转换

    参照这个就行了,这个对应注入类型.===========java注入数据库==========java类型 mysql类型 成功与否date date yesdate time nodate time ...

  9. uva 1401

    Neal is very curious about combinatorial problems, and now here comes a problem about words. Knowing ...

  10. LDAP个人理解

    在新的公司办公,所有的后台系统或文档系统都公用一个LDAP账号. 接触到这个新名词,就查了一下,谈谈个人理解: LDAP是个协议, 简单地说,可以把LDAP服务理解为一套存放你账户密码的数据库系统.市 ...