設計模式分析 建立型模式之工廠模式

2021-10-03 00:15:08 字數 2930 閱讀 6102

在軟體開發中,當我們會用到大量的建立某種物件時,就會使用工廠模式。

我們現在提出乙個需求,乙個披薩店,分為希臘披薩和乳酪披薩,完成訂購披薩的功能。

傳統解決方案:

僅展示orderpizza**:

如上述**就暴露了傳統模式的缺陷,當有大量物件的時候,並且建立pizza的物件好多功能都需要用到(此題功能較少,意思就是如果有多個orderpizza),導致每建立乙個類似pizza物件,就需要修改大量的**。

所以針對上述問題我們先提出了:

優化方案:

首先建立乙個工廠類(注意有兩種方式,靜態和非靜態都可以):

//簡單工廠類

public class ******factory else if (ordertype.equals("cheese")) else if (ordertype.equals("pepper"))

return pizza; }

//簡單工廠模式 也叫 靜態工廠模式

public static pizza createpizza2(string ordertype) else if (ordertype.equals("cheese")) else if (ordertype.equals("pepper"))

return pizza;

}}

將工廠類聚合在我們建立訂單裡面。

public class orderpizza 

public void setfactory(******factory ******factory) else

}while(true); }

// 寫乙個方法,可以獲取客戶希望訂購的披薩種類

private string gettype() catch (ioexception e)

}}

這樣我們就實現了建立**與訂單**的解耦,不會出現大量物件造成的問題。

工廠方法模式和簡單工廠解決的問題都是在建立大量物件時的問題,不過相比較於簡單工廠,工廠方法是乙個介面/抽象類,相比要簡單工廠的聚合方式擴充套件性更高一些。

比如提出下述場景下,工廠方法就相較於簡單工廠更合適。

這樣的訂購如果用簡單工廠,針對不同地區建立不同的工廠類,可以是可以但是相比較這個工廠方法模式,可擴充套件性就很低。(個人認為就是體現在下述**的pizza製作的公共**,如果使用工廠類就會造成大量冗餘)

以下述部分**為例:

public abstract class orderpizza  while (true);	}	

// 寫乙個方法,可以獲取客戶希望訂購的披薩種類

private string gettype() catch (ioexception e)

}}

public class ldorderpizza extends orderpizza  else if (ordertype.equals("pepper")) 

// todo auto-generated method stub

return pizza;

}}

使用:

public class pizzastore  else 

// todo auto-generated method stub

}}

上面提到了簡單工廠的乙個擴充套件性方面的缺陷,而抽象工廠就解決了這個弊端,它相當於是簡單工廠的公升級版,也可以說是簡單工廠和工廠方法的合併版

仍是上述問題,解決方案:

//乙個抽象工廠模式的抽象層(介面)

public inte***ce absfactory

//這是工廠子類

public class bjfactory implements absfactory else if (ordertype.equals("pepper"))

return pizza;

}}

public class ldfactory implements absfactory  else if (ordertype.equals("pepper")) 

return pizza;

}}

public class orderpizza 

private void setfactory(absfactory factory) else

} while (true);

} // 寫乙個方法,可以獲取客戶希望訂購的披薩種類

private string gettype() catch (ioexception e)

}}

具體使用:

public class pizzastore 

}

設計模式之建立型模式 工廠模式

工廠模式 factory pattern 主要用於選擇,根據客戶不同的要求,使用同乙個介面實現不同的功能,然後使用工廠類來判斷使用哪個例項介面,工廠模式是乙個最佳的建立物件的模式。工廠模式的優點 1 在呼叫者只需要知道需要建立的名稱就能夠建立乙個物件,而不用知道產品功能的具體實現,簡化了呼叫者的工作...

Python設計模式 建立型模式 工廠方法模式

描述 coding utf 8 class product def operation self pass class concrete product1 product def operation self return the result of concreteproduct1 class c...

設計模式 建立型模式之抽象工廠模式

抽象工廠模式是工廠模式中最抽象的乙個工廠模式,引入的產品組的概念,對它的定義就是將一組相關或相互依賴的物件提供介面,而不需要具體的物件,這個定義是很抽象的。抽象工廠模式包括的角色 1.抽象工廠類 宣告一組用於建立一種產品的的方法 2.具體工廠類 繼承了抽象工廠類,建立一組具體產品的物件 3.抽象產品...