目錄
外觀類別:為內部類別建立簡潔統一的外觀介面" >外觀類別:為內部類別建立簡潔統一的外觀介面
首頁 web前端 js教程 【設計模式】javascript 外觀模式的應用與實踐

【設計模式】javascript 外觀模式的應用與實踐

Aug 11, 2020 pm 04:19 PM
1

##外觀模式1

html {overflow-x: initial !important;}:root { --bg-color:#ffffff; --文字顏色:#333333; --選擇文字背景顏色:#B5D6FC; --選擇文字字體顏色:自動; --monospace:"Lucida Console",Consolas,"Courier",monospace; } html { 字體大小:14px;背景顏色:var(--bg-color);顏色:var(--文字顏色);字型系列:「Helvetica Neue」、Helvetica、Arial、sans-serif; -webkit-font-smoothing:抗鋸齒; } 正文 { 邊距:0px;內邊距:0px;高度:自動;底部:0px;頂部:0px;左:0px;右:0px;字體大小:1rem;行高:1.42857;溢出-x:隱藏;背景:繼承;選項卡大小:4; } iframe { 邊距:自動; } a.url { 斷字:全部中斷; } a:活動,a:懸停{輪廓:0px; } .in-text-selection,::selection { 文字陰影:無;背景:var(--select-text-bg-color);顏色:var(--選擇文字字體顏色); } #write { 邊距:0px 自動;高度:自動;寬度:繼承;斷詞:正常;溢出換行:斷字;位置:相對;空白:正常;溢出-x:可見;頂部填充:40px; } #write.first-line-indent p { 文字縮排:2em; } #write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; } #write.first-line-indent li { margin-left: 2em; } .for-image #write { 左填充:8px;右內邊距:8px; } body.typora-export { padding-left: 30px;右內邊距:30px; } .typora-export .footnote-line, .typora-export li, .typora-export p { 空白:預換行; } @media 螢幕和(最大寬度:500px){ body.typora-export { 左填充:0px;右內邊距:0px; } #write { 左填充:20px;右內邊距:20px; } .CodeMirror-sizer { margin-left: 0px !important; } .CodeMirror-gutters { 顯示:無! } } #write li > 圖:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { 位置:相對; } img { 最大寬度:100%;垂直對齊:居中; } 按鈕、輸入、選擇、文字區域 { 顏色:繼承;字體:繼承; } 輸入[類型=“複選框”],輸入[類型=“無線電”] { 行高:正常;內邊距:0px; } *, ::after, ::before { box-sizing: border-box; } #write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { 寬度: 繼承; } #write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { 位置:相對; } p { 行高:繼承; } h1、h2、h3、h4、h5、h6 { 中斷後:避免頁;闖入的:避免;孤兒:4; } p { 孤兒:4; } h1 { 字體大小:2rem; } h2 { 字體大小:1.8rem; } h3 { 字體大小:1.6rem; } h4 { 字體大小:1.4rem; } h5 { 字體大小:1.2rem; } h6 { 字體大小:1rem; } .md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { 頂部邊距: 1rem;邊距底部:1rem; } .hidden { 顯示:無; } .md-blockmeta { 顏色: rgb(204, 204, 204);字體粗細:700;字體樣式:斜體; } a { 遊標:指針; } su.md-footnote { 填充:2px 4px;背景顏色: rgba(238, 238, 238, 0.7);顏色:RGB(85,85,85);邊框半徑:4px;遊標:指針; } super.md-footnote a,sup.md-footnote a:hover { 顏色:繼承;文字轉換:繼承;文字裝飾:繼承; } #write input[type="checkbox"] { 遊標:指標;寬度:繼承;高度:繼承; } 圖 { 溢出-x: 自動;邊距:1.2em 0px;最大寬度:計算(100% 16px);內邊距:0px; } 圖>表{邊距:0px! } tr { 內部突破:避免;中斷後:自動; } thead { 顯示:表頭組; } 表 { 邊框折疊:折疊;邊框間距:0px;寬度:100%;溢出:自動;闖入:自動;文字對齊:左對齊; } table.md-table td { 最小寬度:32px; } .CodeMirror-gutters { 右邊框:0px;背景顏色:繼承; } .CodeMirror-linenumber { 使用者選擇:無; } .CodeMirror { 文字對齊:左; } .CodeMirror-placeholder { 不透明度:0.3; } .CodeMirror pre { 填充:0px 4px; } .CodeMirror-lines { 填充:0px; } div.hr:焦點{ 遊標: 無; } #write pre { 空白:預換行; } #write.fences-no-line-wrapping pre { 空白:pre; } #write pre.ty-contain-cm { 空白:正常; } .CodeMirror-gutters { margin-right: 4px; } .md-fences { 字體大小:0.9rem;顯示:塊;闖入的:避免;文字對齊:左對齊;溢出:可見;空白:前;背景:繼承;位置:相對! } .md-diagram-panel { 寬度:100%;上邊距:10px;文字對齊:居中;頂部填充:0px;底部填充:8px;溢出-x:自動; } #write .md-fences.mock-cm { 空白:預換行; } .md-fences.md-fences-with-lineno { 左填充:0px; } #write.fences-no-line-wrapping .md-fences.mock-cm { 空白:pre;溢出-x:自動; } .md-fences.mock-cm.md-fences-with-lineno { 左填充:8px; } .CodeMirror-line, twitterwidget { 內部中斷:避免; } .footnotes { 不透明度:0.8;字體大小:0.9rem;上邊距:1em;下邊距:1em; } .footnotes .footnotes { 頂部邊距:0px; }.md-重置{邊距:0px;內邊距:0px;邊框:0px;輪廓:0px;垂直對齊:頂部;背景:0px 0px;文字裝飾:無;文字陰影:無;浮動:無;位置:靜態;寬度:自動;高度:自動;空白:nowrap;遊標:繼承; -webkit-tap-highlight-color:透明;行高:正常;字體粗細:400;文字對齊:左對齊; box-sizing:內容框;方向: ltr; } li div { 頂部填充:0px; } blockquote { 邊距:1rem 0px; } li .mathjax-block, li p { 邊距: 0.5rem 0px; } li { 邊距:0px;位置:相對; } blockquote > :last-child { margin-bottom: 0px; } blockquote > :first-child, li > :first-child { margin-top: 0px; } .footnotes-area { 顏色: rgb(136, 136, 136);上邊距:0.714rem;底部填充:0.143rem;空白:正常; } #write .footnote-line { 空白:預換行; } @媒體印刷{ body, html { 邊框: 1px 實心透明;身高:99%;中斷之後的:避免;中斷之前:避免;字體變體連字:非通用連字; } #write { 邊距頂部:0px;頂部填充:0px;邊框顏色:透明! } .typora-export * { -webkit-print-color-調整:精確; } html.blink-to-pdf { 字體大小:13px; } .typora-export #write { padding-left: 32px;右內邊距:32px;底部填充:0px;中斷之後的:避免; } .typora-export #write::after { 高度:0px; } } .footnote-line { 頂部邊距:0.714em;字體大小:0.7em; } a img, img a { 遊標: 指標; } pre.md-meta-block { 字體大小:0.8rem;最小高度:0.8rem;空白:預換行;背景:rgb(204, 204, 204);顯示:塊;溢出-x:隱藏; } p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { 顯示:區塊;保證金:自動; } #write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em;位置:相對; } p > .md-image:only-child { 顯示:內聯區塊;寬度:100%; } #write .MathJax_Display { 邊距:0.8em 0px 0px; } .md-math-block { 寬度:100%; } .md-math-block:not(:empty)::after { 顯示:無; } [contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { 大綱: 0px;盒子陰影:無; } .md-task-list-item { 位置:相對;清單樣式類型:無; } .task-list-item.md-task-list-item { 左填充:0px; } .md-task-list-item > 輸入 { 位置:絕對;頂部:0px;左:0px;左邊距:-1.2em;上邊距:calc(1em - 10px);邊框:無; } .math { 字體大小:1rem; } .md-toc { 最小高度:3.58rem;位置:相對;字體大小:0.9rem;邊框半徑:10px; } .md-toc-content { 位置:相對;左邊距:0px; } .md-toc-content::after, .md-toc::after { 顯示:無; } .md-toc-item { 顯示:塊;顏色: rgb(65, 131, 196); } .md-toc-item a { 文字裝飾:無; } .md-toc-inner:hover { 文字裝飾: 底線; } .md-toc-inner { 顯示:內聯塊;遊標:指針; } .md-toc-h1 .md-toc-inner { 左邊距:0px;字體粗細:700; } .md-toc-h2 .md-toc-inner { 左邊距:2em; } .md-toc-h3 .md-toc-inner { 左邊距:4em; } .md-toc-h4 .md-toc-inner { 左邊距:6em; } .md-toc-h5 .md-toc-inner { 左邊距:8em; } .md-toc-h6 .md-toc-inner { 左邊距:10em; } @media 螢幕和(最大寬度:48em){ .md-toc-h3 .md-toc-inner { 左邊距:3.5em; } .md-toc-h4 .md-toc-inner { 左邊距:5em; } .md-toc-h5 .md-toc-inner { 左邊距:6.5em; } .md-toc-h6 .md-toc-inner { 左邊距:8em; } } a.md-toc-inner { 字體大小:繼承;字體樣式:繼承;字體粗細:繼承;行高:繼承; } .footnote-line a:not(.reversefootnote) { 顏色: 繼承; } .md-attr { 顯示:無; } .md-fn-count::after { 內容:「。」; } 程式碼,pre,samp,tt { 字型系列:var(--monospace); } kbd { 邊距:0px 0.1em;填充:0.1em 0.6em;字體大小:0.8em;顏色:rgb(36,39,41);背景:rgb(255, 255, 255);邊框: 1px 實心 rgb(173, 179, 185);邊框半徑:3px;框陰影:rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px 插入;空白:nowrap;垂直對齊:居中; } .md-comment { 顏色: rgb(162, 127, 3);不透明度:0.8;字型系列:var(--等寬字); } 代碼 { 文字對齊:左;垂直對齊:初始; } a.md-print-anchor { 空白:pre !important;邊框寬度:初始!邊框樣式:無!邊框顏色:初始!顯示:內聯塊!位置:絕對!寬度:1px!右:0px!輪廓:0px!背景:0px 0px!文字裝飾:初始!文字陰影:初始! } .md-inline-math .MathJax_SVG .noError { 顯示:無! } .html-for-mac .inline-math-svg .MathJax_SVG { 垂直對齊:0.2px; } .md-math-block .MathJax_SVG_Display { 文字對齊:中心;邊距:0 像素;位置:相對;文字縮排:0px;最大寬度:無;最大高度:無;最小高度:0px;最小寬度:100%;寬度:自動;溢出-y:隱藏;顯示:塊! }.MathJax_SVG_Display,.md-inline-math .MathJax_SVG_Display { 寬度:自動;邊距:繼承;顯示:內聯塊! } .MathJax_SVG .MJX-monospace { 字型系列:var(--monospace); } .MathJax_SVG .MJX-sans-serif { 字型系列:sans-serif; } .MathJax_SVG { 顯示:內嵌;字體樣式:正常;字體粗細:400;行高:正常;變焦:90%;文字縮排:0px;文字對齊:左對齊;文字轉換:無;字母間距:正常;字間距:正常;溢出換行:正常;空白:nowrap;浮動:無;方向: ltr;最大寬度:無;最大高度:無;最小寬度:0px;最小高度:0px;邊框:0px;內邊距:0px;邊距:0 像素; } .MathJax_SVG * { 過渡:無 0 緩和 0; } .MathJax_SVG_Display svg { 垂直對齊:中間!邊距底部:0px!頂邊距:0px! } .os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI 符號", sans-serif; } .md-diagram-panel > svg { 最大寬度:100%; } [lang =「流」] svg,[lang =「美人魚」] svg { 最大寬度:100%;高度:自動; } [lang="美人魚"] .node text { font-size: 1rem; } 表 tr th { border-bottom: 0px; } 視訊 { 最大寬度:100%;顯示:塊;邊距:0px 自動; } iframe { 最大寬度:100%;寬度:100%;邊框:無; } .highlight td, .highlight tr { 邊框: 0px; } svg[id^="mermaidChart"] { 行高: 1em; } 標記 { 背景: rgb(255, 255, 0);顏色: rgb(0, 0, 0); } .md-html-inline .md-plain、.md-html-inline 強、標記 .md-inline-math、標記強 { 顏色:繼承; } 標記 .md-meta { 顏色: rgb(0, 0, 0);不透明度:0.3! } .CodeMirror { 高度:自動; } .CodeMirror.cm-s-inner { 背景:繼承; } .CodeMirror-scroll { 溢出:自動隱藏; z 索引:3; } .CodeMirror-gutter-filler, .CodeMirror-scrollbar-filler { 背景顏色: rgb(255, 255, 255); } .CodeMirror-gutters { border-right: 1px 實心 rgb(221, 221, 221);背景:繼承;空白:nowrap; } .CodeMirror-linenumber { 填充:0px 3px 0px 5px;文字對齊:右對齊;顏色: RGB(153, 153, 153); } .cm-s-inner .cm-keyword { 顏色: rgb(119, 0, 136); } .cm-s-inner .cm-atom, .cm-s-inner.cm-atom { 顏色: rgb(34, 17, 153); } .cm-s-inner .cm-number { 顏色: rgb(17, 102, 68); } .cm-s-inner .cm-def { 顏色: rgb(0, 0, 255); } .cm-s-inner .cm-variable { 顏色: rgb(0, 0, 0); } .cm-s-inner .cm-variable-2 { 顏色: rgb(0, 85, 170); } .cm-s-inner .cm-variable-3 { 顏色: rgb(0, 136, 85); } .cm-s-inner .cm-string { 顏色: rgb(170, 17, 17); } .cm-s-inner .cm-property { 顏色: rgb(0, 0, 0); } .cm-s-inner .cm-operator { 顏色: rgb(152, 26, 26); } .cm-s-inner .cm-comment, .cm-s-inner.cm-comment { 顏色: rgb(170, 85, 0); } .cm-s-inner .cm-string-2 { 顏色: rgb(255, 85, 0); } .cm-s-inner .cm-meta { 顏色: rgb(85, 85, 85); } .cm-s-inner .cm-qualifier { 顏色: rgb(85, 85, 85); } .cm-s-inner .cm-builtin { 顏色: rgb(51, 0, 170); } .cm-s-inner .cm-bracket { 顏色: rgb(153, 153, 119); } .cm-s-inner .cm-tag { 顏色: rgb(17, 119, 0); } .cm-s-inner .cm-attribute { 顏色: rgb(0, 0, 204); } .cm-s-inner .cm-header, .cm-s-inner.cm-header { 顏色: rgb(0, 0, 255); } .cm-s-inner .cm-quote, .cm-s-inner.cm-quote { 顏色: rgb(0, 153, 0); } .cm-s-inner .cm-hr, .cm-s-inner.cm-hr { 顏色: rgb(153, 153, 153); } .cm-s-inner .cm-link, .cm-s-inner.cm-link { 顏色: rgb(0, 0, 204); } .cm-負片 { 顏色: rgb(221, 68, 68); } .cm-正 { 顏色: rgb(34, 153, 34); } .cm-header, .cm-strong { 字體粗細:700; } .cm-del { 文字裝飾:穿梭; } .cm-em { 字體樣式:斜體; } .cm-link { 文字裝飾:底線; } .cm-error { 顏色:紅色; } .cm-invalidchar { 顏色:紅色; } .cm-constant { 顏色: rgb(38, 139, 210); } .cm-定義 { 顏色: rgb(181, 137, 0); } div.CodeMirror span.CodeMirror-matchingbracket { 顏色: rgb(0, 255, 0); } div.CodeMirror span.CodeMirror-nonmatchingbracket { 顏色: rgb(255, 34, 34); } .cm-s-inner .CodeMirror-activeline-background { 背景:繼承; } .CodeMirror { 位置:相對;溢出:隱藏; } .CodeMirror-scroll { 高度: 100%;輪廓:0px;位置:相對;框大小:內容框;背景:繼承; } .CodeMirror-sizer { 位置:相對; } .CodeMirror-gutter-filler、.CodeMirror-hscrollbar、.CodeMirror-scrollbar-filler、.CodeMirror-vscrollbar { 位置:絕對; z 索引:6;顯示:無; } .CodeMirror-vscrollbar { 右:0px;頂部:0px;溢出:隱藏; } .CodeMirror-hscrollbar { 底部:0px;左:0px;溢出:隱藏; } .CodeMirror-scrollbar-filler { 右:0px;底部:0px; } .CodeMirror-gutter-filler { 左:0px;底部:0px; } .CodeMirror-gutters { 位置:絕對;左:0px;頂部:0px;底部填充:30px; z 索引:3; } .CodeMirror-gutter { 空白:正常;高度:100%; box-sizing:內容框;底部填充:30px;下邊距:-32px;顯示:內聯塊; } .CodeMirror-gutter-wrapper { 位置:絕對; z 索引:4;背景:0px 0px!邊框:無! } .CodeMirror-gutter-background { 位置:絕對;頂部:0px;底部:0px; z 索引:4; }.CodeMirror-gutter-elt { 位置:絕對;遊標:預設; z 索引:4; } .CodeMirror-lines { 遊標:文字; } .CodeMirror pre { 邊框半徑:0px;邊框寬度:0px;背景:0px 0px;字體系列:繼承;字體大小:繼承;邊距:0 像素;空白:前;溢出換行:正常;顏色:繼承; z 索引:2;位置:相對;溢出:可見; } .CodeMirror-wrap pre { 溢出換行:斷字;空白:預換行;斷詞:正常; } .CodeMirror-code pre { border-right: 30px 實心透明;寬度:適合內容; } .CodeMirror-wrap .CodeMirror-code pre { border-right: none;寬度:自動; } .CodeMirror-linebackground { 位置:絕對;左:0px;右:0px;頂部:0px;底部:0px; z 索引:0; } .CodeMirror-linewidget { 位置:相對; z 索引:2;溢出:自動; } .CodeMirror-wrap .CodeMirror-scroll { 溢出-x:隱藏; } .CodeMirror-measure { 位置:絕對;寬度:100%;高度:0 像素;溢出:隱藏;可見性:隱藏; } .CodeMirror-measure pre { 位置:靜態; } .CodeMirror div.CodeMirror-cursor { 位置:絕對;可見性:隱藏;右邊界:無;寬度:0 像素; } .CodeMirror div.CodeMirror-cursor { 可見性:隱藏; } .CodeMirror-focused div.CodeMirror-cursor { 可見性:繼承; } .cm-搜尋 { 背景: rgba(255, 255, 0, 0.4); } @媒體印刷{ .CodeMirror div.CodeMirror-cursor { 可見性:隱藏; } } :根 { --side-bar-bg-color: #fafafa; --控製文字顏色:#777; } @include-when-export url(https://fonts.loli.net/css?family=Open Sans:400italic,700italic,700,400&subset=latin,latin-ext); html{ 字體大小:16px; } 身體 { 字體系列:「Open Sans」、「Clear Sans」、「Helvetica Neue」、Helvetica、Arial、sans-serif; 顏色: RGB(51, 51, 51); 行高:1.6; } #寫 { 最大寬度:860px; 保證金:0 自動; 內邊距:30px; 底部填充:100px; } @media only 螢幕和(最小寬度:1400px){ #寫 { 最大寬度:1024px; } } @media only 螢幕和(最小寬度:1800px){ #寫 { 最大寬度:1200px; } } #write > ul:第一個孩子, #write > ol:第一個孩子{ 上邊距:30px; } A { 顏色:#4183C4; } h1, 小時2, 小時3, 小時4, 小時5, h6 { 位置:相對; 上邊距:1rem; 邊距底部:1rem; 字體粗細:粗體; 行高:1.4; 遊標:文字; } h1:懸停a.anchor, h2:懸停a.anchor, h3:懸停a.anchor, h4:懸停a.anchor, h5:懸停a.anchor, h6:懸停 a.anchor { 文字裝飾:無; } h1 TT, h1代碼{ 字體大小:繼承; } 小時2 tt, h2 代碼 { 字體大小:繼承; } h3 TT, h3代碼{ 字體大小:繼承; } 小時4TT, h4代碼{ 字體大小:繼承; } h5 TT, h5代碼{ 字體大小:繼承; } h6 TT, h6代碼{ 字體大小:繼承; } h1 { 底部填充:.3em; 字體大小:2.25em; 行高:1.2; 邊框底部:1px 實線#eee; } h2 { 底部填充:.3em; 字體大小:1.75em; 行高:1.225; 邊框底部:1px 實線#eee; } h3 { 字體大小:1.5em; 行高:1.43; } h4 { 字體大小:1.25em; } h5 { 字體大小:1em; } h6 { 字體大小:1em; 顏色:#777; } p, 區塊引用, 烏爾, 哦, DL, 桌子{ 保證金:0.8em 0; } 麗 > 奧爾, li>ul { 保證金:0 0; } 小時{ 高度:2px; 填充:0; 邊距:16px 0; 背景顏色:#e7e7e7; 邊框:0 無; 溢出:隱藏; box-sizing:內容框; } li p.first { 顯示:內聯塊; } 烏爾, 奧爾{ 左內邊距:30px; } ul:第一個孩子, ol:第一個孩子 { 上邊距:0; } ul:最後一個孩子, ol:最後一個孩子{ 底部邊距:0; } 區塊引用 { 左邊框:4px 實線#dfe2e5; 內邊距:0 15px; 顏色:#777777; } 區塊引用 區塊引用 { 右填充:0; } 桌子 { 填充:0; 斷詞:首字母; } 表 tr { 頂部邊框:1px 實線#dfe2e5; 保證金:0; 填充:0; } 表 tr:第 n 個子級(2n), 頭{ 背景顏色:#f8f8f8; } 表 tr th { 字體粗細:粗體; 邊框:1px實線#dfe2e5; 邊框底部:0; 保證金:0; 內邊距:6 像素 13 像素; } 表 tr td { 邊框:1px實線#dfe2e5; 保證金:0; 內邊距:6 像素 13 像素; } 表 tr th:第一個孩子, 表 tr td:第一個子項 { 上邊距:0; } 表 tr th:最後一個子項, 表 tr td:最後一個子項 { 底部邊距:0; } .CodeMirror-lines { 左內邊距:4px; } .code-tooltip { 盒子陰影:0 1px 1px 0 rgba(0,28,36,.3); 頂部邊框:1px 實線#eef2f2; } .md-柵欄, 程式碼, TT { 邊框:1px實線#e7eaed; 背景顏色:#f8f8f8; 邊框半徑:3px; 填充:0; 內邊距:2px 4px 0px 4px; 字體大小:0.9em; } 代碼 { 背景顏色:#f3f4f4; 內邊距:0 2 像素 0 2 像素; } .md-柵欄{ 下邊距:15px; 上邊距:15px; 頂部填充:8px; 底部填充:6px; } .md-任務清單-項目>輸入{ 左邊距:-1.3em; } @媒體印刷{ html{ 字體大小:13px; } 桌子, 預{ 內部分頁:避免; } 預{ 自動換行:斷詞; } } .md-柵欄{ 背景顏色:#f8f8f8; }#write pre.md-meta-block { 填充:1rem; 字體大小:85%; 行高:1.45; 背景顏色:#f7f7f7; 邊框:0; 邊框半徑:3px; 顏色:#777777; 邊距頂部:0! } .mathjax-block>.code-tooltip { 底部:.375rem; } .md-mathjax-中線{ 背景:#fafafa; } #write>h3.md-focus:之前{ 左:-1.5625rem; 頂部:.375rem; } #write>h4.md-focus:之前{ 左:-1.5625rem; 上圖:.285714286rem; } #write>h5.md-focus:之前{ 左:-1.5625rem; 上圖:.285714286rem; } #write>h6.md-focus:之前{ 左:-1.5625rem; 上圖:.285714286rem; } .md-圖像>.md-元 { /*邊框:1px實心#ddd;*/ 邊框半徑:3px; 內邊距:2 像素 0 像素 0 像素 4 像素; 字體大小:0.9em; 顏色:繼承; } .md-標籤{ 顏色:#a7a7a7; 不透明度:1; } .md-目錄{ 上邊距:20px; 底部填充:20px; } .sidebar-tabs { 底部邊框:無; } #typora-quick-open { 邊框:1px實線#ddd; 背景顏色:#f8f8f8; } #typora-quick-open-item { 背景顏色:#FAFAFA; 邊框顏色:#FEFEFE #e5e5e5 #e5e5e5 #eee; 邊框樣式:實心; 邊框寬度:1px; } /**對焦模式*/ .on-focus-模式塊引用 { 左邊框顏色: rgba(85, 85, 85, 0.12); } 標題、.context-menu、.megamenu-內容、頁尾{ 字體系列:「Segoe UI」、「Arial」、sans-serif; } .file-node-content:懸停.file-node-icon, .file-node-content:懸停 .file-node-open-state{ 可見性:可見; } .mac-seamless-mode #typora-sidebar { 背景顏色:#fafafa; 背景顏色:var(--side-bar-bg-color); } .md-lang { 顏色:#b4654d; } .html-for-mac .context-menu { --item-hover-bg-color: #E6F0FE; } #md-通知.btn { 邊框:0; } .dropdown-menu .divider { 邊框顏色:#e5e5e5; } .ty-首選項 .window-內容 { 背景顏色:#fafafa; } .ty-首選項 .nav-group-item.active { 白顏色; 背景:#999; }

定義

介面面模式,外觀模式外觀模式提供了一個統一的接口,用於存取子系統中的一組接口,定義一組高層介面讓子系統更易用。大幅修改,使用者度也變得簡單。 ,但並不符合使用者直接使用子系統,使用更複雜的功能。系統,這樣可能會給人一種感覺,業務方一定是這麼用的,不會產生bug,從而讓人麻痺,所以,使用外觀模式,也要同時對子系統做好保護。實際上違反了設計模式中的開閉原則,如果我們要修改業務邏輯,常用業務方也需要進行程式碼。一樣的,但是我們的子系統又非常複雜,我們可以考慮封裝一個外觀,讓業務方更容易接入。應用場景。 。

#
xclass FetchMusic {  get resources() {    return [      { id: 1, title: "The Fragile" },      { id: 2, title: "Alladin Sane" },      { id: 3, title: "OK Computer" },    ];  }  fetch(id) {    return this.resources.find((item) => item.id === id);  }}class GetMovie {  constructor(id) {    return this.resources.find((item) => item.id === id);  }  get resources() {    return [      { id: 1, title: "Apocalypse Now" },      { id: 2, title: "Die Hard" },      { id: 3, title: "Big Lebowski" },    ];  }}const getTvShow = function (id) {  const resources = [    { id: 1, title: "Twin Peaks" },    { id: 2, title: "Luther" },    { id: 3, title: "The Simpsons" },  ];  return resources.find((item) => item.id === id);};const booksResource = [  { id: 1, title: "Ulysses" },  { id: 2, title: "Ham on Rye" },  { id: 3, title: "Quicksilver" },];
登入後複製

外觀類別:為內部類別建立簡潔統一的外觀介面

xxxxxxxxxxconst TYPE_MUSIC = "music";const TYPE_MOVIE = "movie";const TYPE_TV = "tv";const TYPE_BOOK = "book";class CultureFacade {  constructor(type) {    this.type = type;  }  _findMusic(id) {    const db = new FetchMusic();    return db.fetch(id);  }  _findMovie(id) {    return new GetMovie(id);  }  _findTVShow(id) {    return getTvShow(id);  }  _findBook(id) {    return booksResource.find((item) => item.id === id);  }  get _error() {    return { status: 404, error: `No item with this id found` };  }  _tryToReturn(func, id) {    const result = func.call(this, id);    return new Promise((ok, err) =>      !!result && JSON.stringify(result) !== "{}"        ? ok(result)        : err(this._error)    );  }  get(id) {    switch (this.type) {      case TYPE_MUSIC: {        return this._tryToReturn(this._findMusic, id);      }      case TYPE_MOVIE: {        return this._tryToReturn(this._findMovie, id);      }      case TYPE_TV: {        return this._tryToReturn(this._findTVShow, id);      }      case TYPE_BOOK: {        return this._tryToReturn(this._findBook, id);      }      default: {        throw new Error("No type set!");      }    }  }}
登入後複製

客戶呼叫:無論音樂、影片、 tv、book 內部子系統是怎麼樣的,都可以用同樣的方式呼叫實作。完成大多數公司使用微服務的開發模式,外觀模式正好契合這樣的開發模式。大,太小都不好。的可重複使用性,但針對特殊情況,允許提供語音的門面接口,來提供更易用的接口。

以上是【設計模式】javascript 外觀模式的應用與實踐的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何創建和發布自己的JavaScript庫? 如何創建和發布自己的JavaScript庫? Mar 18, 2025 pm 03:12 PM

文章討論了創建,發布和維護JavaScript庫,專注於計劃,開發,測試,文檔和促銷策略。

如何在瀏覽器中優化JavaScript代碼以進行性能? 如何在瀏覽器中優化JavaScript代碼以進行性能? Mar 18, 2025 pm 03:14 PM

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

前端熱敏紙小票打印遇到亂碼問題怎麼辦? 前端熱敏紙小票打印遇到亂碼問題怎麼辦? Apr 04, 2025 pm 02:42 PM

前端熱敏紙小票打印的常見問題與解決方案在前端開發中,小票打印是一個常見的需求。然而,很多開發者在實...

如何使用瀏覽器開發人員工具有效調試JavaScript代碼? 如何使用瀏覽器開發人員工具有效調試JavaScript代碼? Mar 18, 2025 pm 03:16 PM

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

如何使用源地圖調試縮小JavaScript代碼? 如何使用源地圖調試縮小JavaScript代碼? Mar 18, 2025 pm 03:17 PM

本文說明瞭如何使用源地圖通過將其映射回原始代碼來調試JAVASCRIPT。它討論了啟用源地圖,設置斷點以及使用Chrome DevTools和WebPack之類的工具。

誰得到更多的Python或JavaScript? 誰得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

開始使用Chart.js:PIE,DONUT和BUBBLE圖表 開始使用Chart.js:PIE,DONUT和BUBBLE圖表 Mar 15, 2025 am 09:19 AM

本教程將介紹如何使用 Chart.js 創建餅圖、環形圖和氣泡圖。此前,我們已學習了 Chart.js 的四種圖表類型:折線圖和條形圖(教程二),以及雷達圖和極地區域圖(教程三)。 創建餅圖和環形圖 餅圖和環形圖非常適合展示某個整體被劃分為不同部分的比例。例如,可以使用餅圖展示野生動物園中雄獅、雌獅和幼獅的百分比,或不同候選人在選舉中獲得的投票百分比。 餅圖僅適用於比較單個參數或數據集。需要注意的是,餅圖無法繪製值為零的實體,因為餅圖中扇形的角度取決於數據點的數值大小。這意味著任何占比為零的實體

console.log輸出結果差異:兩次調用為何不同? console.log輸出結果差異:兩次調用為何不同? Apr 04, 2025 pm 05:12 PM

深入探討console.log輸出差異的根源本文將分析一段代碼中console.log函數輸出結果的差異,並解釋其背後的原因。 �...

See all articles