工廠模式定義:例項化物件,用工廠方法代替new操作.,通過定義乙個工廠類,傳入不同的引數(或者class物件)返回不同的物件,物件繼承的介面。
使用工廠模式,雖然這樣做,可能多做一些工作,但會給你系統帶來更大的可擴充套件性和盡量少的修改量
而這些汽車的元件是與呼叫者無關的,嚴重違反了迪公尺特法則,耦合度太高,給工廠指令,返回具體。
舉例來說,如果直接new實現某介面的物件,將來要對介面進行重新做實現(起個新的類名),
假如你在100個地方呼叫了new,則你有100個地方要改
抽象工廠模式:分別建立形狀工廠和顏色工廠,先呼叫不同的工廠,在返回不同的物件。
某個類只需要建立乙個物件,比如讀取配置檔案,每次使用配置檔案減少new物件,保證同步性。(懶漢式,為空才建立,不可取。餓漢式,初始化就建立,可取。)12
3456
78910
//建立 singleobject 的乙個物件
private
static
singleobject instance =
new
singleobject();
//讓建構函式為 private,這樣該類就不會被例項化
private
singleobject(){}
//獲取唯一可用的物件
public
static
singleobject getinstance()
12
345//通過反射破壞單例模式,建立兩個物件。
constructor constructor = aclass.getdeclaredconstructor(
null
);
constructor.setaccessible(
true
);
singlepattern singlepattern1 = (singlepattern) constructor.newinstance();
system.out.println(singlepattern1.getanimal(
3
));
解決方式:
1、反射建立第二個例項時丟擲異常,防止例項化多個物件。建構函式中的synchronized是為了防止多執行緒情況下例項化多個物件12
3456
synchronized
(singleton.
class
)
count++;
}
2、使用列舉型別。12
345public
enum
singleton
}
簡單工廠模式:客戶端傳乙個條件進工廠類,工廠類根據條件建立相應的產品類物件,並return給客戶端,供客戶端使用。即客戶端使用的是工廠類生產的產品物件。
策略模式:客戶端建立乙個context類物件a(可以看作是工廠模式中工廠類),建立乙個策略物件(具體實現)並傳參給物件a(構造方法),然後客戶端使用a物件的某些方法來使用前面傳參進來的策略,即客戶端是通過a物件使用策略的。(向策略類(即工廠類)傳入不同的操作類,操作類用策略介面接收,操作類同一方法,不同實現。兩個數字的crud操作)
簡單的說,
1、工廠模式根據條件生產出產品給客戶端用。而策略模式是客戶端使用傳參給context的策略(你也可以理成產品),傳入策略的不同,呼叫同樣方法得到的結果也不同。
2、工廠模式:客戶端是使用工廠類生產的物件進行操作,策略模式:客戶端使用自己傳給context的策略的物件進行操作。
建立型模式和行為型模式,策略更偏向於不同的類有不同的演算法,銀行存款選擇定期一年,定期兩年利息的演算法。
3、乙個返回物件,乙個傳入物件。
與**類:
**類與被**類實現的是同乙個介面
策略類容器並沒有實現與內部策略相同的介面
使用**模式,**和真實物件之間的的關係通常在編譯時就已經確定了,而裝飾者能夠在執行時遞迴地被構造。
一般的,我們為了擴充套件乙個類經常使用繼承方式實現,由於繼承為類引入靜態特徵,並且隨著擴充套件功能的增多,子類會很膨脹。
在不想增加很多子類的情況下擴充套件類。
是策略模式的延伸,在策略context方法中,增加擴充套件原有的方法(類似繼承context方法,擴充套件新功能。context實現介面,裝飾器繼承context)。
策略模式更傾向是n選1的模式
當物件間存在一對多關係時,則使用觀察者模式(observer pattern)。比如,當乙個物件被修改時,則會自動通知它的依賴物件。觀察者模式屬於行為型模式。
在抽象類裡有乙個 arraylist 存放觀察者們
乙個物件(目標物件)的狀態發生改變,所有的依賴物件(觀察者物件)都將得到通知,進行廣播通知。
通常乙個實體的屬性改變時,通知所有使用這個實體的類。將乙個實體定義在抽象類中,使用者繼承抽象類。
1、有多個子類共有的方法,且邏輯相同。
2、重要的、複雜的方法,可以考慮作為模板方法。
在抽象類中定義子類的公共方法,設定為final型別,不能被重洗。
public final void ddo(){//三個抽象的方法子類都實現了。
initialize();
startplay();
endplay();
system.out.println("dodo");//定義公共的方法或動作,繼承了這個類的都將共享方法。
比如struts的mvc結構, 其實就是個command模式.
常用設計模式
mvc 模型 檢視 控制器 通過 委託其他物件做事情 或者充當某些功能的中間類 觀察者 在乙個物件或者值發生變化時,對它的觀察者發出通知 單例模式 應用程式執行的過程中只有乙個例項 工廠模式 為物件的建立提供統一的介面 簡單工廠模式,工廠方法模式,抽象工廠模式 裝飾模式 為類動態新增方法 一般用ca...
常用設計模式
常用設計模式有工廠模式 道理模式以及生產者消費者模式 使用靜態內部類的方式可以保證執行緒安全,並且比同步方法的效能好。package com.qqyumidi public class singleton 私有化建構函式 private singleton public static singlet...
常用設計模式
工作一年c 服務端開發,最常用的就是單例模式,那我就從這個開始 1.單例模式是一種只能宣告乙個物件的特殊類 只有乙個例項 該模式的作用是節約系統資源。實現 建構函式和拷貝建構函式私有化。2.簡單工廠模式 簡單工廠模式實際就是建立乙個工廠類,該類根據建立產品的型別引數來呼叫不同的產品類的建構函式 3....