設計模式學習 3

2021-07-13 02:14:24 字數 1627 閱讀 3609

單例(單件)模式確保乙個類只有乙個例項,並提供乙個全域性訪問點。

public

class singleton

public

static singleton getinstance()

return uniqueinstance;}}

把構造器宣告為私有,可以保證外部無法例項化物件,同時singleton類提供乙個靜態getinstance()的方法,使外部可以獲得單一的物件。不過這段**同時還存在乙個問題,如果有兩個執行緒在同時執行getinstance()方法時(這時uniqueinstance還未初始化),可能會例項化兩個singleton物件。

下面是解決方案:

這種方案會影響程式執行效率。

這種方法在jvm載入類時就建立物件,如何物件一直未被使用,會造成資源浪費。

這種方案只有在第一次getinstance()時會引發同步,其餘時間都會正常執行,可以極大限度減少getinstance()的時間消耗。

定義:命令模式將「請求」封裝成物件,以便使用不同的請求、佇列或者日誌來引數化其他物件。命令模式也支援可撤銷操作。

(1) eg:以遙控器為例進行說明。假如現在你有乙個多功能遙控器,你想用這個遙控器對家裡的一些電器進行控制,比如電視,空調,熱水器,臥室燈,客廳燈等。現在有3個概念需要明確,呼叫者,接收者,命令。對這個例子來講,遙控器就是呼叫者,它可以呼叫所有的命令(也可以設定命令,注意,這些命令是用物件封裝起來的,所以可以通過引數來設定),接收者就是各種家用電器,而命令就是你的每個動作行為,就是你想要做的事情,如果你想要「開啟電視」,那麼「開啟電視」就是乙個命令,同理「關閉電視」也是乙個命令。在每個命令中都會包含著execute()方法,和命令的接收者,由接收者真正完成命令。命令模式類圖如下:

(2)利用命令模式可以實現撤銷

實現思路是:在command介面加上undo()操作,然後具體的命令也都要實現undo()操作。然後在呼叫者中加入undocommand狀態變數,記錄最後一次執行的命令是什麼,然後對最後一次執行undo()。具體實現可參照下圖:

命令模式將請求發出者與請求接收者解耦

設計模式學習總結 3 策略模式

策略模式 strategy 屬於行為模式 意圖 定義一系列的演算法,把它們乙個個封裝起來,並且使它們可以相互替換。本模式使得演算法可獨立於它的客戶而變化。什麼意思呢,我想的是,演算法獨立於客戶,我們把一些演算法具體實現封裝起來,成為具體的類,而每乙個演算法獨立為一種具體策略,把演算法和環境 cont...

設計模式學習3 Builder Pattern

在軟體系統中,有時面臨著 乙個複雜物件的建立 的工作,通常是由各個部分的是使用一定的演算法來過程的。由於需求的變化 各個部分在變化 每個部分經常面臨巨大的變化,但是將他們組合在一起的演算法確實相對穩定的。同樣的構建過程可以建立不同的表示。inte ces 這裡是相當於能夠提供的服務,客戶端只需要使用...

PHP設計模式學習筆記 3 基本設計模式概念

mvc的特點是 通過檢視和模型之間建立訂閱 通知協議,實現檢視和模型的解耦。從mvc開始討論設計模式中的各種工具,應為大多數設計模式都是與mvc有關的,只有某些部分是與mvc沒關。ivehicle.php inte ce ivehicle car.php include once ivehicle....