Skip to content

Commit 7ba6e56

Browse files
committed
feat: 1-5-1 done
1 parent e24d4f7 commit 7ba6e56

File tree

4 files changed

+74
-5
lines changed

4 files changed

+74
-5
lines changed

.vscode/settings.json

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"codeline",
2929
"communiqué",
3030
"Coprime",
31+
"Creational",
3132
"dateparts",
3233
"Defun",
3334
"docgen",
@@ -66,6 +67,7 @@
6667
"lemna",
6768
"lenght",
6869
"lineheight",
70+
"Liskov",
6971
"loadtest",
7072
"loginfo",
7173
"lookbahead",

1-5-1.html

+71-4
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,77 @@ <h1>
3434
</aside>
3535
<article>
3636
<h2 id="1-5-1">1-5-1 設計模式導論</h2>
37-
<h3></h3>
38-
<pre><code class="language-js">
39-
40-
</code></pre>
37+
<p>
38+
維基百科中對設計模式的定義是,在軟體 工程中,設計模式(Design
39+
Patten)是對軟體設計中普遍存在(反覆出現)的各種問題所提出的解決方案。這個術語是由埃裡希·伽瑪(Erich
40+
Gamma)等人在
41+
20世紀90年代從建築設計領域引用電腦科學中的。設計模式並不是直接用完成程式的撰寫的,而是描述在各種不同情況下要怎麼解決問題的一種方案。
42+
</p>
43+
<p>
44+
為什麼說這是一個一言難的概念呢?首先,從設計模式的定義中可以看出這是一套理論,一般來說不會在面試
45+
中提出「請你解釋一下設計模式」「你會多少種設計模式」這種問題。一般認為設計模式有23種,這23種設計模式的本質是物件導向設計原則的實際運用,是對類別的封裝性、繼承性和多形性,以及類別的連結關係和組合關
46+
係的歸納應用。
47+
</p>
48+
<p>
49+
設計模式是一種經驗歸納,是套「兵法」,一共包含了23個策略,最後目的是獲得更好的程式重用性、可讀性、可用性、可維護性。
50+
</p>
51+
<h3>設計模式原則</h3>
52+
<p>其包含6大原則</p>
53+
<ul>
54+
<li>開閉原則</li>
55+
<li>里氏替換原則</li>
56+
<li>依賴性反向原則</li>
57+
<li>介面隔離原則</li>
58+
<li>最小知道原則</li>
59+
<li>合重複使用原則</li>
60+
</ul>
61+
<h4>1.開閉原則(Open Close Principle)</h4>
62+
<p>
63+
這裡的開是指對擴充開放,閉是指對修改關閉。想像一下,現在有一套實現,提供一個服務,這樣的程式需要隨時進行擴充、隨時支援協力廠商的自訂設定,但是不能去修改已有的實現程式。
64+
</p>
65+
<p>
66+
現在做了一個 UI
67+
元件,業務方在使用時顯然不能夠修改我們的程式,但是仍然可以對程式進行擴充。再舉例來說,在實現一個編輯器時,著名的
68+
Draft.js
69+
函數庫提供了靈活的外掛程式機制,可以實現熱抽換效果,使整個程式具有良好的擴充性,易於維護合升級。Redux
70+
函數庫、Koa 函數庫等基本所有的函數庫中都有開閉原則的表現。
71+
</p>
72+
<h4>2.里氏替换原則(Liskov Substitution Principle)</h4>
73+
<p>物件導向設計的基本原則:在任何基礎類別可以發揮作用的地方,子類別一定可以發揮作用。</p>
74+
<p>
75+
里氏替換原則就是繼承重複使用的基礎。只有衍生類別可以隨時取代掉其基礎類別,且功能不被破壞,基礎類別的方法仍然能被使用時,才算真正做到了繼承,繼承才能真正實現重複使用。當然,衍生類別也需要隨時能夠在基礎類別的基礎上增加新行為。
76+
</p>
77+
<p>事實上,里氏替換原則是對開閉原則的補充。</p>
78+
<h4>3.依賴性反向原則(Dependence Inversion Principle)</h4>
79+
<p>
80+
該原則要求針對介面進行程式設計,使高層次的模組不依賴低層次模組的實現細節,兩者都應該依賴於抽象介面。
81+
</p>
82+
<h4>4.介面隔離原則(Interface Segregation Principle)</h4>
83+
<p>
84+
介面隔離的意思或目的是減少耦合的出現。在大型軟體架構中,使用多個相互隔離的介面,一定比使用單一大而全的介面要好。
85+
</p>
86+
<h4>5.最少知道原則,又稱迪米特法則(Demeter Principle)</h4>
87+
<p>一個系統的功能模組應該大幅地不知曉其他模組的出現,減少感知,模組之間應相對獨立。</p>
88+
<h4>6.合成重複使用原則(Composite Reuse Principle)</h4>
89+
<p>
90+
合成重複使用原則是指,盡量使用合成/聚合的方式,而非使用繼承。以原型為基礎的繼承在很多方面都優於以類別為基礎的繼承,原因在於以原型為基礎的繼承模式表現了可組合性。組合是非常優秀的程式設計思想,這點在函數式程式設計中大幅地獲得了印證。
91+
</p>
92+
<h3>設計模式的3大類和23種策略</h3>
93+
<p>所有的設計模式大致上 可以歸結為3大類:建立型、 結構型、行為型</p>
94+
<h4>建立型(Creational Pattern)</h4>
95+
<p>
96+
建立型的5種設計模式提供了 更加靈活的物件建立方式,同 時可以隱藏建立的實際邏輯。 與直接使用
97+
new 運算子產生 實體物件相比,這些模式具有更 強的靈活性及可訂製性。
98+
</p>
99+
<h4>結構型(Structural Pattern)</h4>
100+
<p>
101+
結構型的7種設計模式關注類 別和物件的組合,結合繼承的 概念,這些設計模式能使物件
102+
具有更加靈活的功能設定。
103+
</p>
104+
<h4>行為型(Behavioral Pattern)</h4>
105+
<p>行為型的11種式聚焦於物件和類別之間的通訊,這是建置大型程式架構必不可少的部分。</p>
106+
<p>所有類型種式如下圖列舉</p>
107+
<img src="./assets/image/1-5-1/1.jpg" alt="" />
41108
</article>
42109
</main>
43110
</body>

assets/image/1-5-1/1.jpg

328 KB
Loading

js/menuTree.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ export const menu = [
153153
anchorMenu: [
154154
{
155155
id: '1-5-1',
156-
title: '1-5-1 設計模式導論 🚧',
156+
title: '1-5-1 設計模式導論',
157157
href: '1-5-1.html'
158158
}
159159
]

0 commit comments

Comments
 (0)