从接口到工厂 设计模式也很简单

java零基础入门-面向对象篇(十四)  接口(下)


接口这个东西对于新手来说确实有点不好理解,上一章 说了那么多,其实总结起来就是,接口用来制定标准

本章从代码的角度再来解读一下接口这个知识点。嗯~辣条既然那么好吃,本章继续吃辣条。。。

接口的定义与实现

接口里面90%都应该是抽象方法,在java8以后,除了抽象方法,接口里面还可以有默认方法等一些成员。

接口用interface关键字来定义,用implements关键字来实现接口,这里首先定义一个抽象的标准来约束各种标准,然后定义一个辣条类实现接口。


接口的定义与实现

这里用一个具体的辣条实现了标准,然后创建了辣条的对象,将对象赋值给标准的变量,这是多态的一种实现方式。

多态不仅仅在父类和子类之间实现,也可以在接口与实现类之间实现。接口实现多态有一个重要的意义,他体现了一种可插拔的设计思想。

比如这里,如果要修改辣条的标准规范,比如一个规范执行久了,可能会有新的更符合当前情况规范出来,我们不需要去修改原来的标准,而是直接用新的标准代替原来的标准即可。


可插拔的设计思想

对修改关闭,对扩展开放,这是我们写代码的原则。修改会带来很多麻烦,所以使用接口的可插拔思想,可以使我们避免修改老的代码,直接用新的代码代替他。

这里要注意的是,当我们用父子关系实现多态的时候和用接口实现多态的时候,概念是不同的。

接口的继承

我们上一章说了,辣条如果想要在不同的地方销售,是需要遵守不同地方的标准的,所以我们要对这个接口进行一下扩展。

java里面类是单继承,可是接口是可以多继承的,我们上一章也说了,可以用一个标准去同时继承两个标准,再来实现它。


接口多继承

接口的多继承使用逗号分开,有了多继承,可以很方便的在多个标准中进行组合,需要哪些标准的组合,直接继承即可。

假设我们的辣条在A,B地都符合标准了,去了C地,又来个标准,我们完全可以通过多继承再“组合”出一个新的标准,这样我们也无需修改代码,在系统的设计上会灵活许多。

接口的应用

“ 接口到底有什么用?” 很多入门级新手经常会被这样一个问题困扰很久,下面我们就详细说说接口的作用。

接口在很多方面都有大作用,这里举几个例子来理解接口的作用,首先来看看数据库。

数据库有很多种,常用的有mysql和oracle,我们的代码如果想要与数据库通讯,就必须使用对应的数据库驱动包。现在有这样一个场景,假设我的程序连接了两个数据库,我要根据用户的请求来查询不同的数据库,怎么办。

普通玩家的做法是这样:

普通玩家

要满足要求很简单啊,写两个类,一个连接mysql,一个连接oracle不就完了。然后在调用的时候根据参数选择需要连接哪个数据库就完了,打完收工~

你真按这个思路写的话,打完肯定就下岗了。其实写代码最大的问题不在于写完的时候你觉得你多么厉害,多么有效率,而是一旦要修改的时候,才能发现你到底厉不厉害。

假设我要新加一个数据库postgresql,我首先要在被调用方新增一个类,实现连接数据库的方法,然后在调用方还要改代码!main方法就是调用方,需要再加一个else if 的判断,判断是否postgresql。

我们写代码的原则是修改要对调用者透明,就是说你改了代码,不要让调用你功能的地方都一起改,如果你一改代码,大家伙都要加班陪你改,你想想你的下场是什么。

我们再来看看高端玩家怎么做。


高端玩家

看看高端玩家的做法,首先定义一个连接的接口,然后具体的mysql连接类和oracle连接类实现接口。

DataBaseFactory这个类是关键,他将对象的调用和创建分离开来,自己专门的职责就是创建对象,而调用者只管调用。当调用者需要mysql的时候,创建mysql的连接类返回,需要oracle的时候,创建oracle的连接类返回。

在看main方法调用的时候,不管是mysql还是oracle,都直接用接口对象调用方法,不用具体的类去创建对象,这样使程序的灵活性大大增加。

灵活性体现在,一旦需要增加新的数据连接,main方法里一行代码都不需要改变,只需要将参数修改成postgresql就完了。具体需要修改的只是功能的提供方,也就是新增一个postgresql去实现connection接口,然后在DataBaseFactory里面加一个判断即可。

有同学肯定很困扰,你这样搞一大堆,该改的时候还不是要改,有什么区别?

区别就在于,普通玩家需要调用方一起改,要知道一个系统大了,可是不止一个地方有调用的,而高端玩家只需要自己改,调用方不用改,这就是区别。

其实这就是简单工厂模式,工厂就是用来批量创建对象的,不需要调用者自己创建,而是提供者根据调用者的需求来创建,这样设计的好处是,就算我要改功能,对于调用方来说,他是可以完全不关心甚至不用知道。

其实后面学习web的时候,会学习spring这个框架,这个框架里面大量的使用了工厂方法,当然用法更加高级一些,甚至都不需要我们写什么代码,这里跟大家简单介绍一下更高端的玩法,体会一下接口的魅力。

spring

当我们开发一个项目的时候,肯定会大量用到第三方的框架或者开源项目的代码,这样一来,就会有各种各样的调用,如果没有一种规范的方式约束他们,一个系统的复杂程度是难以想象的,比如这样


调用与依赖

红色是调用,就是我调用了某个框架的某个方法。绿色是依赖,就是如果这个框架要能被我使用,就得先让他使用另一个框架的工具,他才能为我提供服务。比如我要烤肉必须依赖炉子,炉子又必须依赖煤炭,依赖关系可以是连续的。

如果没有一个公共的约束,我们的系统就像上面一样,调用错综复杂,依赖无法无天,乱七八糟,最后写代码的就是生不如死。

所以spring为我们定了一个规矩,spring把所有的依赖关系处理好,当我们启动项目的时候,会到spring这个管家这里报道,所有的框架的依赖关系全部记录在册,谁都不能胡来。


注册登记

现在有了spring这个管家是不是用起来舒服多了,我们的程序想要什么直接去找spring要,管家已经帮我们准备好了。

当然,spring可不止这点作用,他的作用大到超乎你的想象,比如除了常规的调用别的框架的方法,还有一些高级玩法。

看上图中的框架J,可以把他理解成一个和数据库有关的框架,他要为我们提供服务,我们总得告诉他我们数据库的账号密码吧,不然他怎么为我们服务?这时候他只需要暴露一个接口,里面写个方法,给我账号密码,OK,我们写一个实现类,然后丢到spring中就完了,框架J会自己去问spring,有没有实现我的接口啊,有的话我就可以提供服务了。

看到了吧,有了接口,就可以为调用方定规矩,按照我的规矩来,我给你提供服务,是不是很厉害。

spring可是博大精深的,以后有机会再给大家讲,本教程还是打java基础的。

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,672评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,827评论 6 342
  • 鹿晗的歌曲《某时某刻》中描述了现在人们的工作环境与工作状态,说的也是我们。我们每天不停的工作,节奏非常的快,...
    办公资源阅读 224评论 0 1
  • 文/邵彦山 信马由缰 我有一百种流迹天涯的想法 去西藏,躲避麻雀碰落的繁花 我有一百种去流迹天涯的想法 却只能,任...
    赊月色阅读 260评论 5 9
  • 今天晚上八点,吴军老师在直播里分享了关于跨界、交友、教育孩子的许多方法,教益颇深。我只说说关于时间的管理。 每个人...
    换换_205c阅读 284评论 0 2