最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

面試官:Mybatis里的設(shè)計(jì)模式有哪些?

2020-12-29 11:48 作者:自學(xué)Python的小姐姐呀  | 我要投稿

建造者模式(Builder Pattern)使用多個(gè)簡(jiǎn)單的對(duì)象一步一步構(gòu)建成一個(gè)復(fù)雜的對(duì)象。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。



從2018年開始,我的簡(jiǎn)歷上開始有一句很diao的話:
研究過Mybatis源碼
然后,每次面試都會(huì)被問到Mybatis里的設(shè)計(jì)模式。
面試官問:既然你研究過Mybatis源碼,哪里說說Mybatis用了哪些常見的設(shè)計(jì)模式?
我基本上都是把相關(guān)設(shè)計(jì)模式先回答一遍。
我:?jiǎn)瘟磕J?、代理模式、工廠模式、裝飾器模式.....劈哩吧啦的說上一堆設(shè)計(jì)模式。
面試官:能不能說說裝飾器模式在Mybatis中的什么場(chǎng)景中會(huì)用到?
我一般是先說什么是裝飾器模式,有什么好處,Mybatis中哪里用到了,這樣用什么好處。
接下來,面試官一般都是抓住其中兩三個(gè)問。
也為了防止老鐵們被問得更多,今天我就整理一番。
建造者設(shè)計(jì)模式
建造者模式(Builder Pattern)使用多個(gè)簡(jiǎn)單的對(duì)象一步一步構(gòu)建成一個(gè)復(fù)雜的對(duì)象。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。
在Mybatis中有SqlSessionFactoryBuilder,構(gòu)建SqlSessionFactory, 這就是使用了建造者模式。
另外在Mybatis中類名以Builder結(jié)尾基本上都是建造者模式。下面是Mybatis中一個(gè)很完整的建造者模式:


XMLConfigBuilder :XML配置構(gòu)建器,建造者模式,繼承BaseBuilder 。
工廠模式
就是專門創(chuàng)建某某對(duì)象的工廠,你要什么對(duì)象,盡管開口,能創(chuàng)建的我來創(chuàng)建,你無需知道是怎么創(chuàng)建出來的。
在Mybatis中以Factory結(jié)尾的類,基本上都是使用了工廠模式。

比如說:
SqlSessionFactory:創(chuàng)建SqlSession對(duì)象。
ObjectFactory:對(duì)象工廠,所有對(duì)象都要由工廠來產(chǎn)生 。
MapperProxyFactory:創(chuàng)建映射器代理 MapperProxy對(duì)象。
單例模式
單例模式(Singleton Pattern)是 Java 中最簡(jiǎn)單的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)創(chuàng)建自己的對(duì)象,同時(shí)確保只有單個(gè)對(duì)象被創(chuàng)建。這個(gè)類提供了一種訪問其唯一的對(duì)象的方式,可以直接訪問,不需要實(shí)例化該類的對(duì)象。
org.apache.ibatis.logging.LogFactory,日志工廠類。
為什么是單例模式呢?情況下面代碼:


org.apache.ibatis.executor.ErrorContext,


代理模式
在代理模式(Proxy Pattern)中,一個(gè)類代表另一個(gè)類的功能。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式。
適配器模式
適配器模式(Adapter Pattern)是作為兩個(gè)不兼容的接口之間的橋梁。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個(gè)獨(dú)立接口的功能。這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)加入獨(dú)立的或不兼容的接口功能。
在Mybatis中,Log,對(duì)于Log4j、JDK、longging這些沒有直接是想slf4j接口的日志組件,需要適配器。
模板方法模式
在模板模式(Template Pattern)中,一個(gè)抽象類公開定義了執(zhí)行它的方法的方式/模板。它的子類可以按需要重寫方法實(shí)現(xiàn),但調(diào)用將以抽象類中定義的方式進(jìn)行。這種類型的設(shè)計(jì)模式屬于行為型模式。定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
在Mybatis中,例如父類BaseExecutor,子類SimpleExecutor、BatchExecutor、ReuseExecutor。還有BaseTypeHandler和所有的子類例如IntegerTypeHandler;
基本都是在父類里實(shí)現(xiàn)一個(gè)通用的方法,然后創(chuàng)建一個(gè)抽象方法,這個(gè)抽象方法留給子類自己去實(shí)現(xiàn)。這個(gè)抽象方法也叫鉤子方法。
裝飾器模式
裝飾器模式(Decorator Pattern)允許向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個(gè)包裝。這種模式創(chuàng)建了一個(gè)裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。
實(shí)際開發(fā)中,大多數(shù)用于對(duì)老項(xiàng)目的某些功能進(jìn)行擴(kuò)展。新項(xiàng)目中一般不怎么用此模式。
此設(shè)計(jì)模式重點(diǎn)在于對(duì)已有的功能進(jìn)行擴(kuò)展。
在Mybatis中,Cache的實(shí)現(xiàn)類LruCache、FifoCache等都是裝飾一個(gè)類PerpetualCache。常見代碼格式,就是裝飾類中會(huì)有個(gè)被裝飾類的屬性,并且這個(gè)屬性還是構(gòu)造方法的參數(shù)。
責(zé)任鏈模式
任鏈模式(Chain of Responsibility Pattern)為請(qǐng)求創(chuàng)建了一個(gè)接收者對(duì)象的鏈。這種模式給予請(qǐng)求的類型,對(duì)請(qǐng)求的發(fā)送者和接收者進(jìn)行解耦。這種類型的設(shè)計(jì)模式屬于行為型模式。在這種模式中,通常每個(gè)接收者都包含對(duì)另一個(gè)接收者的引用。如果一個(gè)對(duì)象不能處理該請(qǐng)求,那么它會(huì)把相同的請(qǐng)求傳給下一個(gè)接收者,依此類推。
生活中的案例:
總結(jié)
上面一共說了8種設(shè)計(jì)模式。其實(shí)在Mybatis中還有更多的設(shè)計(jì)模式,比如說組合模式、迭代器模式 等。
對(duì)于文中的8種設(shè)計(jì)模式,我建議一個(gè)優(yōu)先級(jí),由高往低:
單例->工廠->模板方法->代理->裝飾器->責(zé)任鏈->適配器->建造者。
前面五個(gè)個(gè)人強(qiáng)烈推薦掌握。

想要了解更多可以點(diǎn)擊下方視頻一起來學(xué)習(xí)更多的知識(shí)

常用類JScanner鍵盤輸數(shù)據(jù)結(jié)構(gòu)棧Stack數(shù)據(jù)結(jié)構(gòu)多維數(shù)組數(shù)據(jù)結(jié)構(gòu)叉樹數(shù)據(jù)結(jié)構(gòu)紅黑樹數(shù)

面試官:Mybatis里的設(shè)計(jì)模式有哪些?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
大方县| 乌拉特前旗| 竹山县| 崇礼县| 射阳县| 乌拉特后旗| 巍山| 织金县| 瓮安县| 江陵县| 北安市| 元朗区| 安化县| 中阳县| 寻甸| 监利县| 越西县| 萝北县| 中宁县| 即墨市| 临洮县| 石城县| 神木县| 新沂市| 晋宁县| 漳州市| 宣威市| 怀仁县| 修武县| 灵武市| 讷河市| 项城市| 聂荣县| 微博| 滕州市| 若尔盖县| 视频| 福建省| 开封县| 花垣县| 合川市|