簡單工廠模式和策略模式的區別

2022-02-11 11:04:08 字數 1884 閱讀 6785

看書上的介紹《大話設計模式》,這兩很像,都是用乙個專門的類來根據客戶端的條件產生不同的類,實現不同的功能。兩個有什麼區別呢,怎麼取捨呢,沒有自己寫過實際的運用,有點暈啊,只能侃侃,耍耍嘴皮子。

從客戶端來看,簡單工廠需要至少需要兩個類,乙個是工廠類factory,用來產生具體的功能類function,乙個是這個function類,在這個function類中定義可以被要被重寫的方法。客戶端使用的時候首先要使用factory類根據客戶端條件,產生具體的function類,然後再使用function類中的方法實現具體的功能;策略類,在客戶端也要接觸兩個類,乙個是想要的具體演算法類category,乙個是上下文類context,context類的構造方法接受乙個category型別物件,然後呼叫這個物件的具體演算法實現具體的功能,context類和factory有點類似,和簡單工廠模式不同的是context接受乙個物件,用這個物件來例項化自己,然後來呼叫自己的方法,當然這個方法是用這個物件中的方法。而factory類接受條件產生乙個物件,具體使用這個物件的方法還是要呼叫這個物件中的方法,而不是factory中的方法。就是說factory只負責獲得物件,context要依靠乙個具體的物件來例項化自己,並呼叫具體的功能方法。

從類的結構來看factory只要包含乙個根據條件建立物件的方法createfunction(),context類需要定義自己的建構函式,和乙個實現具體功能的方法。

簡單工廠中包含了必要的邏輯判斷,根據客戶端選擇條件動態例項化相關的類。策略模式中具體的策略類要在客戶端判斷,然後再上下文類中呼叫方法。

簡單工廠**如下:

**public

class

factory

case

conditionb:

default:

break;}

}public

calss function

}public

class

functiona:function

}public

calss fuctionb:function

}public

static

void

main()

策略模式**如下:

**public

class

context

public

void

dostragegywork()

}abstract

class

strategy

public

class

strategya:strategy

}public

class

strategyb:strategy

}public

static

void

main(

string

args)

可以讓策略模式和簡單工廠模式結合起來,讓new

context(sb);這個構造方法接受乙個條件變數,在方法體中根據這個變數產生具體的類來例項化。

具體方法如下:

**public

class

context

public

void

dostragegywork()

}abstract

class

strategy

public

class

strategya:strategy

}public

class

strategyb:strategy

}public

static

void

main(

string

args)

哪位大俠可以舉個在專案中的運用,貼點簡單的**看看,先謝謝了。我這些都是從書本裡得來的。

簡單工廠模式和策略模式的區別

最近一直在抽時間研究設計模式,之前對設計模式也有一定的了解,但是都沒有平心靜氣的去研究過,只是了解了一些皮毛,最近打算再深入研究一下,重新開啟了設計模式的資料,對之前的疑問乙個個的刨根問底,今天看了簡單工廠模式和策略模式看的人有點小暈,兩個的大概思路沒有怎麼變,都是通過多型去減少 的耦合度,怎麼看兩...

簡單工廠模式和策略模式的區別

而下面是我的理解 按一般教程中出現的例子理解 簡單工廠模式 客戶端傳乙個條件進工廠類,工廠類根據條件建立相應的產品類物件,並return給客戶端,供客戶端使用。即客戶端使用的是工廠類生產的產品物件。策略模式 客戶端建立乙個context類物件a 可以看作是工廠模式中工廠類 建立乙個策略物件並傳參給物...

簡單工廠模式和策略模式的區別

按一般教程中出現的例子理解 簡單工廠模式 客戶端傳乙個條件進工廠類,工廠類根據條件建立相應的產品類物件,並return給客戶端,供客戶端使用。即客戶端使用的是工廠類生產的產品物件。策略模式 客戶端建立乙個context類物件a 可以看作是工廠模式中工廠類 建立乙個策略物件並傳參給物件a,然後客戶端使...