国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

前端的設計模式系列-外觀(門面)模式

開發 前端
代碼也寫了幾年了,設計模式處于看了忘,忘了看的狀態,最近對設計模式有了點感覺,索性就再學習總結下吧。

本文轉載自微信公眾號「windliang」,作者windliang。轉載本文請聯系windliang公眾號。

代碼也寫了幾年了,設計模式處于看了忘,忘了看的狀態,最近對設計模式有了點感覺,索性就再學習總結下吧。

大部分講設計模式的文章都是使用的 Java、C++ 這樣的以類為基礎的靜態類型語言,作為前端開發者,js 這門基于原型的動態語言,函數成為了一等公民,在實現一些設計模式上稍顯不同,甚至簡單到不像使用了設計模式,有時候也會產生些困惑。

下面按照「場景」-「設計模式定義」- 「代碼實現」- 「更多場景」-「總」的順序來總結一下,如有不當之處,歡迎交流討論。

場景

網絡請求中,我們一般使用 axios 庫,支持用 Promise 風格調用。

axios
.get("/api/user", {
params: {
ID: "123",
},
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});

axios
.post(
"/api/user",
{
firstName: "wind",
lastName: "liang",
},
{
headers: { "Content-Type": "application/json" },
}
)
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});

可以看到上邊的 get 和 post 傳參并不統一,使用起來會比較繁瑣,post還需要手動傳遞 headers 。

為了解決這些問題,我們可以通過外觀(門面)模式來解決。

外觀(門面)模式

看下 維基百科 的定義。

★The facade pattern (also spelled fa?ade) is a software-design pattern commonly used in object-oriented programming. Analogous to a facade in architecture, a facade is an object that serves as a front-facing interface masking more complex underlying or structural code.”外觀模式相當于為一個相對復雜的接口或者結構提供一個上層接口供用戶使用,看一下UML 類圖。

舉一個簡單例子,比如開電腦是一個復雜的過程,我們可以封裝成一個函數來實現:

/* Complex parts */

class CPU {
public void freeze() { ... }
public void jump(long position) { ... }
public void execute() { ... }
}

class Memory {
public void load(long position, byte[] data) {
...
}
}

class HardDrive {
public byte[] read(long lba, int size) {
...
}
}

/* Fa?ade */

class Computer {
public void startComputer() {
cpu.freeze();
memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE));
cpu.jump(BOOT_ADDRESS);
cpu.execute();
}
}

/* Client */

class You {
public static void main(String[] args) {
Computer facade = new Computer();
facade.startComputer();
}
}

改寫成 js 。

算了不改寫了,哈哈,直白點其實就是把幾個函數封裝到了一個函數來調用。

UML 類圖中外觀模式會和很多 class交互,但在 js 中可能會很少遇到這種情況,通常是當參數比較復雜或者某個功能使用起來比較麻煩的時候我們就可以通過外觀模式進行簡化。

代碼實現

回到開頭 axios 的問題,我們可以對axios 進行一層封裝。

// request.js
import axios from 'axios';
export const get = function (url, params) {
return axios.get(url, { params });
};

export const post = function (url, params) {
return axios.post(
url,
{ ...params },
{ headers: { "Content-Type": "application/json" } }
);
};

然后引用 request.js 進行調用。

import { get, post } from "./request";

get("/api/user", {
ID: "123",
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});

post("/api/user", {
firstName: "wind",
lastName: "liang",
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});

補充一句:上邊的封裝只是為了演示外觀模式的使用,實際項目中封裝的會更加全面

通過門面模式除了簡化了我們的調用,還有一個好處就是將底層調用封裝了起來,未來如果底層需要變化,比如上邊的 axios替換為 fetch ,我們只需要去修改 request.js 即可,業務方無需感知。

更多場景

外觀模式說的寬泛的話就是將復雜的調用包裝一層變的簡單些。

我們平時用到的 Vue 的 template 、React 的 jsx ,也可以認為使用了外觀模式,他們都將底層 dom 創建封裝起來,使得我們編寫頁面會變得更加簡單。

易混設計模式

前邊講到的 代理模式、適配器模式、模版方法 結構上和外觀模式看起來都有些像,區別就在于他們的意圖不同:

適配器模式是為了解決兩個對象之間不匹配的問題,而原對象又不適合直接修改,此時可以使用適配器模式進行一層轉換。

代理模式是為了增強原對象的功能,提供的接口不會改變。

模版模式是將不同功能組合在一起,只提供框架,具體實現還需要調用者傳進來。

外觀模式是將比較復雜的調用進行一層封裝,提供一個新的接口供用戶使用。

外觀模式是一個比較自然的設計模式,某個功能感覺用起來太麻煩還頻繁,自然會想到去封裝一層再來使用。

外觀模式一個額外好處就是未來能夠更好的應對底層的變化。


責任編輯:武曉燕 來源: windliang
相關推薦

2021-03-18 15:33:22

設計模式外觀

2020-10-23 09:40:26

設計模式

2022-11-14 08:44:56

前端門面模式接口

2022-01-19 08:21:12

設計裝飾器模式

2022-02-11 10:22:48

模版模式語言

2021-04-18 21:07:32

門面模式設計

2022-02-06 22:30:36

前端設計模式

2023-05-06 07:51:22

JavaFacade設計模式

2022-01-29 22:12:35

前端模式觀察者

2022-02-13 23:33:24

設計模式Java

2024-02-19 13:11:38

門面模式系統

2010-01-21 09:08:53

.NET設計模式

2022-01-12 13:33:25

工廠模式設計

2020-11-03 13:05:18

命令模式

2020-11-04 08:54:54

狀態模式

2020-10-19 09:28:00

抽象工廠模式

2021-03-02 08:50:31

設計單例模式

2022-01-14 09:22:22

設計模式橋接

2021-06-09 08:53:34

設計模式策略模式工廠模式

2021-09-29 13:53:17

抽象工廠模式
點贊
收藏

51CTO技術棧公眾號

精品国产黄a∨片高清在线| 欧美一区二区三区激情视频 | 久久伊人一区| 久久久久久一级片| 日本一区二区三区视频在线看| 99免在线观看免费视频高清| 欧美黄色免费影院| 一区二区精品国产| 成人黄动漫网站免费| 亚洲欧美日韩一区二区在线| 国产精品一品视频| 欧美成人69av| 四季av在线一区二区三区| 青草在线视频| 亚洲国产精品精华素| 在线国产情侣| 黄色片在线免费| 国产在线观看福利| 免费高清一区二区三区| 免费在线观看污污视频| 日韩精品国内| 国产精品国产福利国产秒拍| 国产成人精品一区| 亚洲精品一区二区在线| 亚洲一区www| 精品国内亚洲在观看18黄| 久久综合久久美利坚合众国| www.日韩免费| 久久的精品视频| 精品播放一区二区| 欧美一级欧美三级| 欧美日韩精品在线视频| 欧美日韩精品一区二区天天拍小说 | 免费在线视频一区| 成人在线视频你懂的| 激情网站在线| av在线看片| 正在播放日韩精品| 亚洲永久av| 伊人久久一区| 红桃视频在线观看一区二区| 色综合咪咪久久网| 国产精品日韩精品欧美精品| 久久精品系列| 北岛玲一区二区三区四区| 中文字幕一区二| 亚洲va天堂va国产va久| 一本到不卡精品视频在线观看| 一本久道久久综合婷婷鲸鱼| 国产激情91久久精品导航| 久久午夜电影网| 国产一在线精品一区在线观看| 国产精品偷拍| 亚洲一区在线日韩在线深爱| 国产精品第157页| 成人av网站观看| 国产66精品久久久久999小说| 国产做受高潮69| 蜜月aⅴ免费一区二区三区| 亚洲深夜福利网站| **欧美日韩vr在线| 国产精品久久久久久久久久久久久 | 成人精品aaaa网站| 激情网站五月天| av网站在线不卡| 欧美色图另类小说| 国产高清av在线播放| 91嫩草免费看| 亚洲自拍偷拍福利| 涩涩视频在线观看免费| 人成免费电影一二三区在线观看| 久草免费在线| a'aaa级片在线观看| 国产精品丝袜在线播放| 日本在线啊啊| 伦理一区二区三区| 日韩成人午夜精品| 久久亚洲私人国产精品va媚药| 精品午夜一区二区三区在线观看| 99视频+国产日韩欧美| 国产亚洲一卡2卡3卡4卡新区| 97品白浆高清久久久久久| 免费人成在线不卡| 欧美日本一区二区在线观看| 日本电影亚洲天堂一区| 中文字幕精品—区二区| 91久久国产婷婷一区二区| 色婷婷综合久久久中文字幕| 国产精品久久久久久福利一牛影视| 国产精品一区二区视频| 狠狠色丁香婷婷综合| 免费av成人在线| 99国产精品久久一区二区三区| 欧美亚洲日本| 日本在线人成| 成人超碰在线| 国产区一区二| 欧美a级一区| 久久电影国产免费久久电影| 91视频.com| 狠狠躁夜夜躁久久躁别揉| 精品国一区二区三区| 精品中文字幕在线2019| 成人免费网站在线观看| 日韩在线第三页| 日韩偷拍自拍| 欧美日韩尤物久久| 午夜精品电影| 亚洲专区一二三| 国产91精品在线播放| 国产精品成人久久久久| 欧美在线日韩在线| 久久久久久艹| 美女av在线免费观看| av在线免费观看网址| 久久影视三级福利片| 一区二区三区午夜探花| 久久久久亚洲蜜桃| 日韩av在线最新| 51国偷自产一区二区三区| 国产日韩一区二区在线观看| 美女网站视频一区| 成人免费看的视频| 欧美精品日日鲁夜夜添| 波多野结衣成人在线| 免费a级人成a大片在线观看| 三级欧美在线一区| 亚洲视频一区在线观看| 久久香蕉频线观| 99热这里只有精品7| 日本中文在线观看| 欧美伊人久久| 欧美一二三区在线| 亚洲国产精品久久久久久女王| 精品欧美不卡一区二区在线观看 | www.涩涩涩| 色综合久久久| 国产成人av电影免费在线观看| 精品久久久久一区| 国产视频精品久久久| 超污网站在线观看| 高清视频一区二区| 久久99精品国产99久久6尤物| 日韩激情免费视频| 色狠狠久久av综合| 亚洲国产中文字幕| 国产在线欧美日韩| 国产丝袜精品丝袜| 久久只精品国产| 国产精品第2页| 黄网站app在线观看| 久久99国产精品久久99| 亚洲精品国产成人| 国产一线二线三线女| 中文字幕色婷婷在线视频| 中文字幕一区二区三区乱码在线| 欧美日韩亚洲91| 成人台湾亚洲精品一区二区 | 久久精品国产亚洲一区二区三区| 91久久国产综合久久| 少妇精69xxtheporn| caoporen人人| 亚洲国产日韩欧美在线| 日韩精品一区二区三区三区免费 | 97国产在线观看| 四虎精品成人免费网站| 免费精品视频在线| 久久成人国产精品| 日本成人网址| 成人精品高清在线| 国产精品久久久久久久久免费看| 欧美激情成人动漫| 亚洲一区在线播放| 日韩精品免费一区| 好吊一区二区三区| 国产精品美乳一区二区免费| 日韩激情图片| 亚洲午夜精品久久久久久性色| 国产高潮av| 国产成人精品免费视频网站| 91在线色戒在线| 精品一区二区三区亚洲| 亚洲精品成人网| 青青视频在线观| 一区二区在线看| jizz在亚洲| 大白屁股一区二区视频| 亚洲一区二区精品在线| 久久久久久一二三区| 亚洲人成人77777线观看| 老牛国产精品一区的观看方式| 欧美伦理视频网站| av大片免费看| 午夜天堂影视香蕉久久| 成av人片在线观看www| 在线观看免费视频综合| 依依成人在线| 一色屋精品亚洲香蕉网站| 成人一区二区免费视频| 韩国欧美一区二区|