設計模式實踐

2022-03-13 15:40:49 字數 3075 閱讀 6225

一。是什麼

設計模式(design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、**設計經驗的總結。

二。為什麼需要設計模式

第一原則,也是終極原則必須知道:對修改關閉,對擴充套件開放。叫做增閉原則更容易理解。因為大部分擴充套件都是增加的動作。

關閉了還想擴充套件,如何做到,請說人話。

說人話:把修改盡量集中到乙個地方,這樣修改乙個地方,就修改了所有使用到的地方。或者通過增加類來進行擴充套件而不是修改方法。

最新發現好像準確的意思就是關閉修改,開放擴充套件,也就是以擴代改,

三,小結

記住增閉原則,那麼就記住了24種設計模式和設計模式7大原則。

記住組合優先於繼承。那麼就秒懂了:迭代器模式,介面卡模式,裝飾模式...等等。

很多設計模式剛開始不理解,是正常的,必須認識到,設計模式是乙個工程目標,不是為了**簡潔。而是為了對修改關閉。

只有理解到了設計模式的目標是對修改關閉,而不是簡潔,才會理解設計模式。

如何理解對修改關閉?就是把修改從方法內部趕到方法外部。從方法外部趕到類外部。從模組內部趕到模組外部。越遠越好。

怎麼趕?

1.用組合代替繼承,改一次繼承一次。明顯不如組合,把修改放到外吧。把它組合進來就可以,如迭代器模式。

2.用介面來趕,如工廠模式,裡面建立各種物件,不如讓各種物件實現介面。呼叫介面實現者的建立方法。

我們常說的組合優於繼承

是由於繼承是固定的,而組合可以把原類的功能隨意擴充套件和拋棄,更靈活。

三。逐一實踐

四。總結

建立   建立型模式用來處理物件的建立過程

單例(singleton)模式:某個類只能生成乙個例項,該類提供了乙個全域性訪問點供外部獲取該例項,其拓展是有限多例模式。

原型(prototype)模式:將乙個物件作為原型,通過對其進行複製而轉殖出多個和原型類似的新例項。

工廠方法(factory method)模式:定義乙個用於建立產品的介面,由子類決定生產什麼產品。

建造者(builder)模式:將乙個複雜物件分解成多個相對簡單的部分,然後根據不同需要分別建立它們,最後構建成該複雜物件。

結構   結構型模式用來處理類或者物件的組合

**(proxy)模式:為某物件提供一種**以控制對該物件的訪問。即客戶端通過**間接地訪問該物件,從而限制、增強或修改該物件的一些特性。

介面卡(adapter)模式:將乙個類的介面轉換成客戶希望的另外乙個介面,使得原本由於介面不相容而不能一起工作的那些類能一起工作。

橋接(bridge)模式:將抽象與實現分離,使它們可以獨立變化。它是用組合關係代替繼承關係來實現,從而降低了抽象和實現這兩個可變維度的耦合度。

裝飾(decorator)模式:動態的給物件增加一些職責,即增加其額外的功能。關鍵點是裝飾,所以實際場景是不想對原有類進行較大改動,而只是裝飾。

外觀(facade)模式:為多個複雜的子系統提供乙個一致的介面,使這些子系統更加容易被訪問。

享元(flyweight)模式:運用共享技術來有效地支援大量細粒度物件的復用。

組合(composite)模式:將物件組合成樹狀層次結構,使使用者對單個物件和組合物件具有一致的訪問性。

行為   用來對類或物件怎樣互動和怎樣分配職責進行描述

模板方法(templatemethod)模式:定義乙個操作中的演算法骨架,而將演算法的一些步驟延遲到子類中,使得子類可以不改變該演算法結構的情況下重定義該演算法的某些特定步驟。

策略(strategy)模式:定義了一系列演算法,並將每個演算法封裝起來,使它們可以相互替換,且演算法的改變不會影響使用演算法的客戶。

命令(command)模式:將乙個請求封裝為乙個物件,使發出請求的責任和執行請求的責任分割開。

狀態(state)模式:允許乙個物件在其內部狀態發生改變時改變其行為能力。

觀察者(observer)模式:多個物件間存在一對多關係,當乙個物件發生改變時,把這種改變通知給其他多個物件,從而影響其他物件的行為。

中介者(mediator)模式:定義乙個中介物件來簡化原有物件之間的互動關係,降低系統中物件間的耦合度,使原有物件之間不必相互了解。

迭代器(iterator)模式:提供一種方法來順序訪問聚合物件中的一系列資料,而不暴露聚合物件的內部表示。

訪問者(visitor)模式:在不改變集合元素的前提下,為乙個集合中的每個元素提供多種訪問方式,即每個元素有多個訪問者物件訪問。

備忘錄(memento)模式:在不破壞封裝性的前提下,獲取並儲存乙個物件的內部狀態,以便以後恢復它。

直譯器(interpreter)模式:提供如何定義語言的文法,以及對語言句子的解釋方法,即直譯器。

這7中模式,基本涵蓋了開閉思想的絕大部分體現。掌握這7種模式。就可以說知道了23中模式吧。

建立性模式:如工廠,是為了靈活建立物件。

工廠模式,是開閉原則的最佳體現。 工廠內部對修改開放也就是對變化開發。使用工廠的地方對修改關閉。

結構性模式:如裝飾模式,豐富了類和物件。

橋接模式,代表了多維變化的處理思路。

裝飾模式,讓原類不變的前提下,動態的擴充套件原類的某方法。是組合優於繼承的體現。繼承就像乙個專屬模板 hardcode,而裝飾這種就是活字印刷。

行為模式:一組物件如何協作,如觀察者模式,需要觀察和行為執行者,合作來完成某個場景。

觀察者,代表了 類之間基本的事件處理。**這個是現代語言的基礎。

狀態模式,代表了把行為本身物件化的思想,方便狀態增刪的情況下擴充套件行為。

命令模式,行為不再屬於乙個物件的方法。而是把方法作為乙個類,方法的執行者反而是乙個引數。這樣方便一起需要把動作作為物件的場景,如,動作的排序,組合,撤銷等以動作為主體的場景。

迭代器模式,代表通過組合讓變化移除原類的思路。

js設計模式和實踐4

使用轉殖的原型模式 例子 假設我們在編寫乙個飛機大戰的網頁遊戲。某種飛機擁有分身技能,當它使用分身技能的時 候,要在頁面中建立一些跟它一模一樣的飛機。如果不使用原型模式,那麼在建立分身之前,無 疑必須先儲存該飛機的當前血量 炮彈等級 防禦等級等資訊,隨後將這些資訊設定到新建立的 飛機上面,這樣才能得...

設計模式 1 策略模式原理及實踐

策略模式作為一種軟體設計模式,指物件有某個行為,但是在不同的場景中,該行為有不同的實現演算法。比如每個人都要 交個人所得稅 但是 在美國交個人所得稅 和 在中國交個人所得稅 就有不同的算稅方法。策略模式的結構組成 抽象策略角色 策略類,通常由乙個介面或者抽象類實現。環境角色 持有乙個策略類的引用,最...

設計模式實際工作實踐 橋梁模式

1 多維度分析。2 適用於有可能多個維度組合形成乙個場景,並且各個維度可能分別演化的場景 3 為自己工作,為自己的系統工作,做自己的老闆,形成正迴圈 打磨當前工作的核心關鍵能力 高效能工作 更多時間打磨自己的系統 更高效能工作 打磨下個層次工作的核心關鍵能力 4 核心競爭力,是指你擁有的 獨特的 知...