“十六年后 在此重会;夫妻情深 勿失信约”,悲痛欲绝的杨过跑到断肠崖,看到小龙女亲手留在石壁上的文字,即惊喜又痛苦不欲生:“十六年!为什么要等到十六年?!”。

但是信约已定,痴情的杨过也只能等十六年了。

离开断肠崖后,杨过一边开始了自己的苦苦的等待与思恋,一边寄情练功,当然开始时候也忘不了吃那疗伤的草药。后来杨过巧遇了千年神雕,和神雕一见如故,从此便开始修炼独孤求败的武功。无事可做,寄情练剑倒也不失为人生的一大快事。“相思无用,唯别而已。别期若有定,千般煎熬又何如?莫道黯然销魂,何处柳暗花明?!”,惊天地泣鬼神的黯然销魂掌就这样诞生了。时 光飞逝,恍惚间快过了十六年。此时,杨过的神功已成,想象着十六年约期就将来临,心中想象着自己一生的挚爱,不免感慨和激动万分!在祭拜过求败他老人家之后,杨过和神雕一起开始去赴那场长达十六年之久的约会。令众生激动和艳羡。

再出江湖的杨过惩奸除恶、帮扶弱小,很快就侠名远播,被人尊称为“神雕侠”。自己心中想象着小龙女过往的一笑一颦,想象着她是怎么度过这十六年的,不禁催生了更加浓烈的相思和相见之情。

千呼万唤,终于,这一天来到!

断肠崖边,佳人芳踪迹未现,过儿万念俱灰,纵身跳下悬崖…

幸好悬崖下面是深渊,杨过并没有死,被水冲到了岸边的杨过苏醒过来后,看到了很多小蜜蜂,他一眼就认出了这是小龙女样的蜜蜂,莫非龙儿就在附近?最后在深潭水下,杨过找到了自己苦苦等待了十六年的挚爱。原来小龙女得知自己无药可救,也纵身跳下断肠崖,十六年之期只不过是为了让杨过不要轻生。但是跳崖后的小龙女并没有死掉,接着就在谷底一个世外桃源的地方慢慢的疗伤,竟然完全康复了。真是有情人终成眷属,有情人终成名人。

定义: 

接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此 这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

接口是对抽象的抽象。

接口就是标准,就是承诺。

针对接口编程,不要针对具体编程是依赖倒转原则的另外一种表述。

针对接口编程又称为面向接口编程,针对接口编程就是要先设计一系列的接口,把设计和实现分离开,使用时只需引用接口即可,也由于系统各部分的解耦合。如下图所示:

故事分析: 

“十六年后 在此重会;夫妻情深 勿失信约”就是针对接口编程的一个绝妙的例子。而且最后还加了“信约”一次。言外之意就是说我们说好了要十六年在此地重逢,我们俩都要遵照此约定。根据上面的故事,小龙女和杨过制定好接口后,就纵身跳下了悬崖,不管自己的过儿了,因为她此时已经不用关心过儿怎么去再十六年后河自己相见,只要十六年后在此地相见即可,也就是说小龙女针对和使用都是接口,至于杨过怎么实现,她此时已经身患绝症而无法顾及了。而杨过看过此约定后,虽然无奈,但也只好照办。具体实现如下:回去吃断肠草调理自己,然后以神雕为伴练习武功,知道练成了黯然销魂掌而神功大成,然后就是在江湖上做侠义之事,然后就是按照信约与十六年后来 到断肠崖边;而小龙女就在谷底慢慢的调养,十六年后身体早已康复,而且越发迷人了。当杨过没有见到小龙女时纵身跳崖,遵照了“问世间情为何物,直教人生死相许”标准。

总结一下:小龙女和杨过定下接口,然后各自针对接口各自独立的做事,最终得以相见。

针对接口编程是未来提高程序的可维护性、可伸缩性和可复用性。如果你在一个类中直接使用另外的一个,这样就把两个类紧密的联系在了一起,以后如果想做出改变就很难了。如果针对接口编程,当业务变化时我们只需要用一个新的类实现接口即可,而客户端依旧可以使用接口引用新的类的,同时也保证了客户端的不变性。这样客户端和实现端互不影响,保持了各自的相对独立性。正如小龙女和杨过的,他们树立了十六年制约后,就不用关心彼此的如何去赴这场约定,只需要按照约定做事就OK了。互不影响,自由在在。如下图所示:

Java代码实现: 

新建一个“信约”的接口,这个接口是杨过和小龙女都必须通过自己的方式实现的。代码如下:

package com.diermeng.designPattern.dating;

/*

* 杨过和小龙女定下的约定接口

*/

public interface Dating {

/*

* 约定的接口

*/

public void dating();

}

然后分别建立杨过和小龙女的实现类,分别实现上面的接口。代码依次如下:

package com.diermeng.designPattern.dating.impl;

import com.diermeng.designPattern.dating.Dating;

/*

* 杨过对接口的实现

*/

public class Yangguo implements Dating {

/*

* 姓名

*/

String name;

/*

* 默认空构造方法

*/

public Yangguo(){}

/*

* 传入name参数的构造方法

*/

public Yangguo(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

/*

* (non-Javadoc)

* @see com.diermeng.dating.inter.Dating#dating()

* 杨过对约定的实现

*/

public void dating() {

if(this.getName()!=null){

System.out.println(this.getName()+" : "+"十六年后 在此重会;夫妻情深 勿失信约");

}

else{

System.out.println("十六年后 在此重会;夫妻情深 勿失信约");

}

}

}

package com.diermeng.designPattern.dating.impl;

import com.diermeng.designPattern.dating.Dating;

/*

* 小龙女对接口的实现

*/

public class XiaoLongnv implements Dating{

/*

* 姓名

*/

String name;

/*

* 默认空构造方法

*/

public XiaoLongnv(){}

/*

* 传入name参数的构造方法

*/

public XiaoLongnv(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

/*

* (non-Javadoc)

* @see com.diermeng.dating.inter.Dating#dating()

* 小龙女对约定的实现

*/

public void dating() {

if(this.getName()!=null){

System.out.println(this.getName()+" : "+"十六年后 在此重会;夫妻情深 勿失信约");

}

else{

System.out.println("十六年后 在此重会;夫妻情深 勿失信约");

}

}

}

建立一个测试类,代码如下:

package com.diermeng.designPattern.dating.client;

import com.diermeng.designPattern.dating.Dating;

import com.diermeng.designPattern.dating.impl.XiaoLongnv;

import com.diermeng.designPattern.dating.impl.Yangguo;

/*

* 对杨过和小龙女约定进行测试的客户端

*/

public class DatingTest {

public static void main(String[] args)

{

//分别实例化实例化

Dating yangguo = new Yangguo("过儿");

Dating xiaoLongnv = new XiaoLongnv("龙儿");

//调用各自的方法

yangguo.dating();

xiaoLongnv.dating();

}

}

程序运行结果如下:

过儿 : 十六年后 在此重会;夫妻情深 勿失信约

龙儿 : 十六年后 在此重会;夫妻情深 勿失信约

已有应用简介: 

Java是面向对象编程的语言,而面向对象编程的核心之一就是要针对针对接口编程、不要针对实现编程,在Java API中的标志接口java.io.Serializable和java.rmi.Remote等就是我们经常遇到的,下面以java.io.Serializable为例说明一下,源代码如下:

package java.io;

public interface Serializable{}

UML图形如下图所示:

当然在J2EE框架的使用中到处都是针对接口编程的身影。例如在www.babasport.com中几乎每一处都是针对接口编程的,令人印象非常深刻的一点就是巴巴运动网把对数据库的CRUD等基本操作封装在了一个统一接口中,这给以后的代码的编写和数据库的操作带来了极大的方便,当然这里也使用了Java 5的泛形技术。有兴趣的读者可以去学习巴巴运动网的源代码。

温馨提示: 

许下的承诺就是欠下的债。所以不要轻易做出承诺。

杨过和小龙女为了承诺而付出了十六年的努力。

在软件设计和编码中,如果确立了接口,也就对客户做出了承诺,这种承诺几乎没有改变的机会,时间越长越是如此,因为那是别人对你接口的使用已经遍布世界各地,当然前提是你的接口很出色,这样才能取得很多人的信赖和消费。

Android大话设计模式 第一章----针对接口编程---问世间情为何物 直教人生死相许相关推荐

  1. 设计引导---不要再盲目的new了!你要学着针对接口编程!(具体方法,Factory,Abstract Factory)...

    应园友提议,本篇博将帮助大家解决"针对接口编程"这一疑惑.而我所讲的例子将从上一篇设计引导---一个鸭子游戏引发的设计(多态,继承,抽象,接口,策略者模式)的案例中,延伸下来,让大 ...

  2. 从针对接口编程到依赖注入

    1.概况说明 2.猫狗大战举例 3.说明为什么要针对接口编程,优点 4.说明为什么要"依赖抽象,不要依赖具体类" 5.说明"依赖倒置"与抽象工厂模式 6.说明& ...

  3. 针对接口编程,不要针对实现编程

    这个OO设计原则,策略模式中也有运用,先参照代码和代码注释简单了解一下: public abstract class Cat {IEatBehavior pEatBehavior; // 用接口定义一 ...

  4. 对“针对接口编程,而不是针对实现编程”的理解

    对"针对接口编程,而不是针对实现编程"的理解 今天在阅读<Head First设计模式>的时候,看到了这句话:"针对接口编程,而不是针对实现编程", ...

  5. 16第一章 ASP.Net编程基础知识

    第一章        ASP.Net编程基础知识 第一章        ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...

  6. 设计原则 —— 针对接口编程而不针对实现编程

    对"针对接口编程,而不是针对实现编程"的理解 应该针对接口编程 而不是针对实现编程 0. 理解 接口,定义了一堆空实现函数的接口,如下,是对其全部实现类的约束,即必须实现我(接口) ...

  7. 精通CSS与HTML设计模式 第一章(轻松搞定CSS)

    精通CSS与HTML设计模式 第一章(轻松搞定CSS) 精通CSS与HTML设计模式 第二章(HTML设计模式) 精通CSS与HTML设计模式 第三章(CSS选择符与继承) 精通CSS与HTML设计模 ...

  8. c语言程序第一章编程,c语言程序的设计第一章 C语言编程入门.ppt

    c语言程序的设计第一章 C语言编程入门 第1章 C语言编程入门 本章是本书的入门篇,专为初学者熟悉编程过程.掌握程序结构而准备的. 本章学习目标 ? 1)? 能够通过模仿与改变来构造带有测试函数的C语 ...

  9. 设计模式工作笔记-简单工厂场景与实现(针对接口编程的设计思想)

    简单工厂:通过接口的方式,把实现和变化隔离 接口编程:是一种特殊的抽象类,是一个纯虚类.通常接口来定义类的外部,就相当于一份契约,其实就是根据外部应用 需要的功能,约定了实现类应该要实现的功能. 软件 ...

  10. Android大话设计模式 第三章----开放封闭原则---孙悟空任弼马温一职

    应用场景举例 孙悟空从东海龙宫拿到定海神针如意金箍棒后回到花果山,和自己的部下过着自由自在的生活.那只好景不长,因为他在地狱删除了自己和花果山所有猴子的名单,同时又拿走了定海神针,不久便被阎王和龙王告 ...

最新文章

  1. 遮掩java_关于java中的覆写、重载、隐藏、遮掩、遮蔽
  2. always@( )列表里不能同时有电平敏感事件和边沿触发事件
  3. swagger ui remove springboot paths
  4. 啥是PID?PID可以吃吗?
  5. 新春大吉,2017 Make .NET Great
  6. ubuntu 以太网已连接但是无法联网_工业以太网有多“牛X”?两个案例告诉你
  7. vim循环下表复制_Vimrc Init.vim太长了?不存在的
  8. math.atan_Python中带有示例的math.atan()方法
  9. HTML+CSS+JS实现 ❤️酷炫情人节爱心动画特效❤️
  10. 1月19日学习内容整理:Scrapy框架补充之scrapy-redis组件
  11. 系列文章--SharePoint 2013 开发教程
  12. Java一套拳法刷掉n个遍历树的问题
  13. Keli Proteus 8 的使用教程
  14. 阿里前端电话面试问题
  15. 无需 Cookie,把 Python 微博爬虫改写成 Chrome 插件
  16. 【ospf-vlink虚拟连接】
  17. 典型相关分析(Canonical correlation analysis)(二):原始变量与典型变量之间的相关性 、典型相关系数的检验
  18. Spring Boot入门教程(三十五):支付宝集成-准备工作
  19. 计算机课程与就业关系,计算机专业课程及就业方向
  20. 项目:招聘网站信息(获取数据+数据分析+数据可视化)

热门文章

  1. python通过scapy模块进行arp断网攻击
  2. Python遥感影像拼接
  3. Simulink Solver
  4. mac下安装和使用brew
  5. 测试开发人员与开发人员_我是真正的开发人员还是优秀的Googler?
  6. syslinux引导硬盘linux,使用SysLinux引导Linux系统
  7. 7月31日 细雨霏霏 不是我的泪
  8. onkeyup和onafterpaste键盘输入限制
  9. 软件测试模型有哪些?
  10. 邓元鋆:AMD的方法论