在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框架)中该接口的实现类就能够完毕需求。不须要改写现有代码,降低对系统的影响。

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

最新文章

  1. Android AppBar
  2. Andriod 自定义控件之创建可以复用的组合控件
  3. 自动ftp上传文件脚本
  4. Android之TelephonyManager类的方法详解
  5. JS 滚动效果
  6. 【MySQL】insert批量插入优化方案
  7. Kafka的消息格式
  8. PERL高效代码摘录 - 数组
  9. NoSQL发展简史、粗略分类及选择
  10. 解决ubuntu 里面vi的时候上下左右是ABCD删除也不起作用
  11. HTML学习(八)列表和块
  12. 巧妙地使用typora编辑有道云笔记
  13. NFV-Bench A Dependability Benchmark for Network Function Virtualization Systems
  14. DevExpress ASP.NET Core Controls 2019发展蓝图(No.1)
  15. JAVA 集合 按照某个字段(依据一定条件)进行分组
  16. LeetCode刷题:第七题 整数翻转 第九题 回文数
  17. Java 输入一组数字,用穷举的方法列出
  18. Applet程序组件与AJAX技术
  19. macbook 下 spark开发环境搭建(基于idea 和maven)及spark单机写运行jar
  20. MySQL中的sort_buffer_size参数大小的设置问题

热门文章

  1. 【USACO2002 Feb】奶牛自行车队
  2. flask中的蓝图(BluePrint)
  3. Android开发中的SQLite事务处理,即beginTransaction()方法
  4. 319 Bulb Switcher 灯泡开关
  5. 数字签名与数字证书以及https
  6. 【转】Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
  7. [ SHOI 2012 ] 随机树
  8. js indexOf 列表筛选
  9. 循环语句和方法(day4)
  10. Style在Android中的继承关系