工作中的設(shè)計(jì)模式 —— 門(mén)面模式
本文轉(zhuǎn)載自微信公眾號(hào)「程序員小航」,作者程序員小航。轉(zhuǎn)載本文請(qǐng)聯(lián)系程序員小航公眾號(hào)。
前言
門(mén)面模式也叫外觀模式,是一種結(jié)構(gòu)型設(shè)計(jì)模式,能為程序庫(kù)、框架或其他復(fù)雜類提供一個(gè)簡(jiǎn)單的接口。
1使用場(chǎng)景
門(mén)面模式可以說(shuō)是在工作中使用非常多的一種設(shè)計(jì)模式了,比如常用的 slf4j。
下面簡(jiǎn)單介紹常用的使用場(chǎng)景:
為遠(yuǎn)程接口設(shè)計(jì)統(tǒng)一入口
比如需要調(diào)用微信支付寶支付,里面一大堆參數(shù),參數(shù)什么也不一樣,這時(shí)候就可以統(tǒng)一封裝一個(gè)接口,然后小伙伴們使用的時(shí)候,只需要調(diào)用封裝的接口就可以了。
也不用擔(dān)心同樣是狀態(tài),這里叫 status,那里叫 orderStatus了。反正對(duì)外都是一個(gè)統(tǒng)一的門(mén)面,你自己定義即可。
好處
統(tǒng)一封裝門(mén)面的好處,就是可以 Mock。
這也是我最近了解到的,之前都是一把嗦,誰(shuí)管 junit。
Mock 就是說(shuō)在 junit 測(cè)試中,使用 @MockBean 注入一個(gè) mock 對(duì)象,然后自己定義返回。
- Mockito.when( xxxFacadeService.methodX()).thenReturn(mockBean);
就是調(diào)用某個(gè)接口的時(shí)候,返回自己 mock 的對(duì)象。
這個(gè)我也是才發(fā)現(xiàn)的,因?yàn)槲以囍褂?@MockBean 注解 Dubbo 接口的對(duì)象,但是并不行。
不過(guò)還是可以變通的,所有的調(diào)用外部接口的地方,不管是 http 還是 dubbo,全部都封裝了門(mén)面,這樣我 mock 自己的門(mén)面接口就 ok 了。
2總結(jié)
在開(kāi)發(fā)中,除了會(huì)封裝很多外部接口為門(mén)面外,也會(huì)把自己的接口封裝為一個(gè)門(mén)面。
也會(huì)有結(jié)合策略模式的使用,或者結(jié)合適配器模式。這些都有很多很多的使用場(chǎng)景,不過(guò)單獨(dú)弄懂一個(gè),后續(xù)遇到就自己擴(kuò)展。
相關(guān)資料
[1] 《深入設(shè)計(jì)模式》:https://refactoringguru.cn/design-patternss
[2] 封面圖:https://refactoringguru.cn/design-patterns/facade