Spring学习(2):面向接口编程思想

一. 引言

  Spring核心的IOC的实体用了面向接口编程思想,所以有必要了解下。简单来说的话,Spring就是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。

  接口的定义的概念:泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。关注点:抽象化,交互。(实体提供给外部的功能抽象化成一个接口(java概念),使得内部修改不影响外部与其的交互。(关注点由具体实现转移到接口交互))

二. 正文  

(1)先看个例子

  汽车和轮胎,假设有一辆汽车Car,Bridgestone轮胎,Michelin轮胎

Bridgestone转动:

public class Bridgestone{
    public void roll() {
        System.out.print("Bridgestone is rolling.");
    }
}

Michelin转动:

class Michelin {
    public void roll() {
        System.out.print("Michelin is rolling");
    }
}

汽车转动:

public class Car {
    public void roll(Bridgestone Bridgestone ) {
        Bridgestone.roll();
    }
}

(扩展性)但是如果汽车使用了Michelin轮胎,那么汽车的代码无法实现,需要修改,那么就变成如下:

public class Car {
    public void roll(Michelin michelin ) {
        michelin.roll();
    }
}

可是如果还有A,B,C等牌子的轮胎(类比喻:业务需求变化)呢,那要改无数次。很明显这样子的设计类之间的代码耦合度太紧,难以复用(Car的代码无法在各中轮胎下复用,都需要修改),编写单元测试困难(?:必须保证Car的roll方法被调用时候,Bridgestone的roll方法被要被调用。单元测试这块暂时不了解。)

  单元测试概念:是指对软件中的最小可测试单元进行检查和验证。

  如果将这两种轮胎的共同特性提取出来,汽车转动轮胎时,无须知道轮胎的特定类型(品牌,对应的子类),只要轮胎有客户所期望的接口(roll)就行了,那样Car的代码扩展性好,可以接受任意实现Trie接口的轮胎,单元测试简单(注入实现类),代码耦合度松耦合相对之前的。

interface Tire {
    public void roll();
}

class Bridgestone implements Tire {
    public void roll() {
        System.out.print("Bridgestone is rolling.");
    }
}

class Michelin implements Tire {
    public void roll() {
        System.out.print("Michelin is rolling");
    }
}
public class Car {
    public void roll(Tire tire) {tire.roll(); } 
}

  以上就是面向接口编程的一个例子。

  面向接口编程:面向接口意味着面向抽象,将各个实体之间的耦合程度由组件之间的耦合提升到接口层次,由接口做为粘合剂去维护关系,让一个实体由依赖另一个实体,转变成依赖一个接口,将被依赖实体的变化隔绝于接口之外。

(1)接口就是标准规范,一种规范约束,有了标准去遵守就容易扩展!我们只需要面向标准编程,而不用针对具体的实现类!面向接口编程好处:(1)抽象;(2)高内聚,低耦合,降低开发成本/维护成本(Car的开发者和轮胎的开发者可以并行开发,独立测试;替换轮胎,不需要修改Car的代码)。

(2)协调者(接口),调用者,实现者,接口本质上就是协调者来维护实现者和调用者之间的关系。实现者和调用者都必须遵循接口的规则(标准)。

例子:JDBC,各种数据库都按照JDBC的标准规范去开发数据库驱动程序,程序员都按照JDBC的标准去使用访问数据库。好处:驱动程序编写者不用去学接口文档来向程序员解释驱动程序的用法,程序员不关心具体的数据库。

(3)高内聚,低耦合概念

  高内聚低耦合是软件设计的一个基本原则,说的是在程序的各个模块中,尽量让每个模块独立,相关的处理尽量在单个模块中完成,就是俗话说的:该干嘛干嘛去!优点:能提降低各模块的之间的联系,减少“牵一发而动全身”的几率,提高开发效率,降低升级维护成本,也便于进行单元测试,提高软件质量。

  耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。

  高内聚关键字:最充分的利用模块中每一个元素的功能,达到功能实现最大化,内聚性越强越好,用最小的资源干最大的事情!

  低耦合关键字:项目中的各个模块之间的关联要尽可能的小,耦合性(相互间的联系)越低越好,减小“牵一发而动全身”的可能性!

     高耦合例子:一个程序有50个函数,这个程序执行得非常好;然而一旦你修改其中一个函数,其他49个函数都需要做修改,这就是高耦合的后果。

 参考资料:

  CSDN:https://blog.csdn.net/u013400743/article/details/51252003

      https://blog.csdn.net/qq376430645/article/details/9927225

  百度知道:https://baike.baidu.com/item/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1917084?fr=aladdin

  书籍:Spring实战第4版

猜你喜欢

转载自www.cnblogs.com/knsbyoo/p/9079374.html