常用設計模式

2021-10-20 19:50:00 字數 3260 閱讀 4417

答:模板方法模式是指定義乙個模板結構,將具體內容延遲到子類去實現。

優點:

提高**復用性:將相同部分的**放在抽象的父類中,而將不同的**放入不同的子類中;

實現了反向控制:通過乙個父類呼叫其子類的操作,通過對子類的具體實現擴充套件不同的行為,實現了反向控制並且符合開閉原則。

以給冰箱中放水果為例,比如,我要放乙個香蕉:開冰箱門 → 放香蕉 → 關冰箱門;如果我再要放乙個蘋果:開冰箱門 → 放蘋果 → 關冰箱門。可以看出它們之間的行為模式都是一樣的,只是存放的水果品類不同而已,這個時候就非常適用模板方法模式來解決這個問題,實現**如下:

/\* \* 新增模板方法 \*

/abstract

class

refrigerator

public

abstract

void

put();

public

void

close()

}class

banana

extends

refrigerator

}class

extends

refrigerator

}/\* \* 呼叫模板方法 \*

/public

class

templatetest

}

**模式是給某乙個物件提供乙個**,並由**物件控制對原物件的引用。

優點:

**模式能夠協調呼叫者和被呼叫者,在一定程度上降低了系統的耦合度;

可以靈活地隱藏被**物件的部分功能和服務,也增加額外的功能和服務。

缺點:**模式實現**如下:

/\* \* 定義售票介面 \*

/inte***ce

iairticket

/\* \* 定義飛機場售票 \*

/class

airticket

implements

iairticket

}/\* \* **售票平台 \*

/class

proxyairticket

implements

iairticket

@override

public

void

buy()}

/\* \* **模式呼叫 \*

/public

class

proxytest

}

答:單例模式是一種常用的軟體設計模式,在應用這個模式時,單例物件的類必須保證只有乙個例項存在,整個系統只能使用乙個物件例項。

優點:不會頻繁地建立和銷毀物件,浪費系統資源。

使用場景:io 、資料庫連線、redis 連線等。

單例模式**實現:

class

singleton

}

單例模式呼叫**:

public

class

lesson7\_3

}

程式的輸出結果:true

可以看出以上單例模式是在類載入的時候就建立了,這樣會影響程式的啟動速度,那如何實現單例模式的延遲載入?在使用時再建立?

單例延遲載入**:

// 單例模式-延遲載入版

class

singletonlazy

return instance;

}}

以上為非執行緒安全的,單例模式如何支援多執行緒?

使用 synchronized 來保證,單例模式的執行緒安全**:

class

singletonlazy

return instance;

}}

答:簡單工廠模式又叫靜態工廠方法模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。比如,一台咖啡機就可以理解為乙個工廠模式,你只需要按下想喝的咖啡品類的按鈕(摩卡或拿鐵),它就會給你生產一杯相應的咖啡,你不需要管它內部的具體實現,只要告訴它你的需求即可。

優點:

工廠類含有必要的判斷邏輯,可以決定在什麼時候建立哪乙個產品類的例項,客戶端可以免除直接建立產品物件的責任,而僅僅「消費」產品;簡單工廠模式通過這種做法實現了對責任的分割,它提供了專門的工廠類用於建立物件;

客戶端無須知道所建立的具體產品類的類名,只需要知道具體產品類所對應的引數即可,對於一些複雜的類名,通過簡單工廠模式可以減少使用者的記憶量;

通過引入配置檔案,可以在不修改任何客戶端**的情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。

缺點:

不易拓展,一旦新增新的產品型別,就不得不修改工廠的建立邏輯;

產品型別較多時,工廠的建立邏輯可能過於複雜,一旦出錯可能造成所有產品的建立失敗,不利於系統的維護。

簡單工廠示意圖如下:

簡單工廠**實現:

class

factory

return result;

}}

答:抽象工廠模式是在簡單工廠的基礎上將未來可能需要修改的**抽象出來,通過繼承的方式讓子類去做決定。

比如,以上面的咖啡工廠為例,某天我的口味突然變了,不想喝咖啡了想喝啤酒,這個時候如果直接修改簡單工廠裡面的**,這種做法不但不夠優雅,也不符合軟體設計的「開閉原則」,因為每次新增品類都要修改原來的**。這個時候就可以使用抽象工廠類了,抽象工廠裡只宣告方法,具體的實現交給子類(子工廠)去實現,這個時候再有新增品類的需求,只需要新建立**即可。

抽象工廠實現**如下:

public

class

abstractfactorytest

}// 抽象工廠

abstract

class

abstractfactory

// 啤酒工廠

class

bee***ctory

extends

abstractfactory

return result;}}

/\* \* 咖啡工廠 \*

/class

coffeefactory

extends

abstractfactory

return result;

}}

常用設計模式

mvc 模型 檢視 控制器 通過 委託其他物件做事情 或者充當某些功能的中間類 觀察者 在乙個物件或者值發生變化時,對它的觀察者發出通知 單例模式 應用程式執行的過程中只有乙個例項 工廠模式 為物件的建立提供統一的介面 簡單工廠模式,工廠方法模式,抽象工廠模式 裝飾模式 為類動態新增方法 一般用ca...

常用設計模式

常用設計模式有工廠模式 道理模式以及生產者消費者模式 使用靜態內部類的方式可以保證執行緒安全,並且比同步方法的效能好。package com.qqyumidi public class singleton 私有化建構函式 private singleton public static singlet...

常用設計模式

工作一年c 服務端開發,最常用的就是單例模式,那我就從這個開始 1.單例模式是一種只能宣告乙個物件的特殊類 只有乙個例項 該模式的作用是節約系統資源。實現 建構函式和拷貝建構函式私有化。2.簡單工廠模式 簡單工廠模式實際就是建立乙個工廠類,該類根據建立產品的型別引數來呼叫不同的產品類的建構函式 3....