面向接口编程的一些总结

1.面向接口编程产生的背景

在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成,在这种情况下各个对象内部是如何实现自己对系统设计人员来说就不那么重要了.而各个对象之间的协作关系则成为系统设计的关键,在日常工作中,如果别人修改的代码频繁的影响到你,表现在某个模块的改动引起其他模块的大规模调整,说明模块接口没有很好的设计.所有面向接口编程显得尤为重要.

2.什么是面向接口编程?


面向接口编程就是先把客户的业务逻辑线提取出来,作为接口,业务具体实现通过该接口的实现来完成.当客户需求变化的时候,只需编写该业务逻辑的新的实现类,通过更改配置文件(例如Spring框架)中该接口的实现类就可以完成需求,不需要修改现有的代码,减少对系统的影响

3.面向接口编程的优点?

  1.降低程序的耦合性,能够最大限度的解耦合

  2.易于程序的扩展

  3.有利于程序的维护

4.接口编程在设计模式中的体现:开闭原则

  那么是么是开闭原则呢?一句话概括:对扩展开放,对修改关闭.

开放封闭原则的简单概述:开放-封闭原则是面向对象设计的核心所在.遵循这个原则可以带来面向对象技术所声称的巨大好处:

可维护  可扩展  可复用  灵活性好

开发人员应该仅对程序中呈现出频繁的变化那部分作出抽象,然而对于应用程序中的每个部分进行刻意的抽象同样并不是一个好主意,拒绝不成熟的抽象和抽象本身一样重要(切记,切记).

  面向接口将具体逻辑与实现分开,减少了各个类之间的相互依赖,当各个类变化时候,不需要对已经编写的类进行改动,添加新的实现类可以了,不用担心新改动的类对系统的其他模块造成影响

5.关于抽象类的设计是如何体现多态的?


静态类型语言通常设计为可以“向上转型”。当给一个类变量赋值时,这个变量的类型既可以使用这个类本身,也可以使用这个类的超类。就像看到天上有只麻雀,既可以说“一只麻雀在飞”,也可以说“一只鸟在飞”,甚至可以说成“一只动物在飞”。通过向上转型,对象的具体类型被隐藏在“超类型”身后。当对象类型之间的耦合关系被解除之后,这些对象才能在类型检查系统的监视下相互替换使用,这样才能看到对象的多态性

抽象类的一些作用:

    1.向上转型

举例:

让麻雀对象和鸭子对象的类型都隐藏在抽象类Dird类型之后,隐藏对象的的具体类型之后,麻雀和鸭子才能被交换使用,这是让对象表现出多态性的必经之路

 2.建立一些契约继承自抽象类的具体类都会继承抽象类里的abstract方法,并且要求覆写它们。这些契约在实际编程中非常重要,可以帮助编写可靠性更高的代码。

比如在命令模式中,各个子命令类都必须实现execute方法,才能保证在调用command.execute的时候不会抛出异常。如果让子命令类OpenTvCommand继承自抽象类Command:

abstractclass Command{

  publicabstractvoid execute();

}publicclass OpenTvCommand extends Command{

  public OpenTvCommand (){};

  publicvoid execute(){

    System.out.println("打开电视机" );

  }

}

自然有编译器帮助检查和保证子命令类OpenTvCommand覆写了抽象类Command中的execute抽象方法。如果没有这样做,编译器会尽可能早地抛出错误来提醒正在编写这段代码的程序员

 总而言之,不关注对象的具体类型,而仅仅针对超类型中的“契约方法”来编写程序,可以产生可靠性高的程序,也可以极大地减少子系统实现之间的相互依赖关系,这就是面向接口编程

6.使用抽象类还是接口?

 分析: 在使用接口的同时仍旧可以使用抽象类,不过这时抽象类的作用是实现行为,而不是定义行为.只要实现行为的类遵从接口定义,即使它改变了父抽象类,也不用改变其它代码与之交互的方式。特别是对于公用的实现代码,抽象类有它的优点。抽象类能够保证实现的层次关系,避免代码重复。然而,即使在使用抽象类的场合,也不要忽视通过接口定义行为模型的原则。从实践的角度来看,如果依赖于抽象类来定义行为,往往导致过于复杂的继承关系,而通过接口定义行为能够更有效地分离行为与实现,为代码的维护和修改带来方便。

  行为模型要通过接口定义而不是抽象类. 抽象类结合接口使用,抽象类的作用是实现行为,而不是定义行为.

采用接口还是抽象类参考一下两点:

    1. 如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。

    2. 如果知道某个类应该是基类,那么第一个选择的应该是让它成为一个接口,只有在必须要有方法定义和成员  变量的时候,才应该选择抽象类。因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有被全部  实现该类就仍是抽象类。

7.关于接口特性的一些整理

1. 接口中的方法可以有参数列表和返回类型,但不能有任何方法体。

2. 接口中可以包含字段,但是会被隐式的声明为static和final。

3. 接口中的字段只是被存储在该接口的静态存储区域内,而不属于该接口。

4. 接口中的方法可以被声明为public或不声明,但结果都会按照public类型处理。

5. 当实现一个接口时,需要将被定义的方法声明为public类型的,否则为默认访问类型,Java编译器不允许这种情况。

6. 如果没有实现接口中所有方法,那么创建的仍然是一个接口。

7. 扩展一个接口来生成新的接口应使用关键字extends,实现一个接口使用implements。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,967评论 6 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,631评论 18 399
  • 浅谈我眼中的“服务意识” 服务是一种互动,我们需要与客户建立良好的互动关系和通畅的反馈渠道。同时,能获得“客户的反...
    YY哥阅读 625评论 0 2
  • 不吼不叫,不打不骂,我要做个温柔好妈妈。一直提醒自己,麻醉自己。可是越来越感觉我就是办不到! 不要搞垃圾桶!把垃圾...
    孖宝妈咪ManMan阅读 276评论 2 0
  • 若是你仍在孤独, 不用着急,我的朋友 当枯叶飘落的时候,你自会遇到新雨 若是你仍在迷茫, 不用着急,我的朋友 当鲜...
    狮子堡堡主阅读 212评论 0 3