工廠方法模式,又稱工廠模式,定義乙個建立產品物件的工廠介面,將產品物件的實際建立工作推到具體子工廠類當中。這滿足建立型模式中所要求的「建立與使用相分離」的特點。
將類的例項化(具體產品的建立)延遲到工廠類的子類(具體工廠)中完成,即由子類來決定應該例項化(建立)哪乙個類。
工廠方法模式的主要角色如下。
抽象工廠(abstract factory):提供了建立產品的介面,呼叫者通過它訪問具體工廠的工廠方法 newproduct() 來建立產品。
具體工廠(concretefactory):主要是實現抽象工廠中的抽象方法,完成具體產品的建立。
抽象產品(product):定義了產品的規範,描述了產品的主要特性和功能。
具體產品(concreteproduct):實現了抽象產品角色所定義的介面,由具體工廠來建立,它同具體工廠之間一一對應。
使用者只需要知道具體工廠的名稱就可得到所要的產品,無須知道產品的具體建立過程;
在系統增加新的產品時只需要新增具體產品類和對應的具體工廠類,無須對原工廠進行任何修改,滿足開閉原則;
其缺點是:每增加乙個產品就要增加乙個具體產品類和乙個對應的具體工廠類,這增加了系統的複雜度。
我們通過手機的生產過程來演示工廠方法模式。
/**
* 手機介面
*/public inte***ce phone
/** * 華為手機
*/public class huawei implements phone
}/**
* 蘋果手機
*/public class iphone implements phone
}/**
* 小公尺手機
*/public class xiaomi implements phone
}
/**
* phone 的抽象工廠類
* 提供了建立產品的介面,呼叫者通過它訪問具體工廠的工廠方法 producephone() 來建立手機產品。
*/public abstract class abstractphonefactory
/** * huawei 生產工廠
* 主要是實現抽象工廠中的抽象方法,完成具體產品的建立。
*/public class huaweifactory extends abstractphonefactory
}/**
* iphone 生產工廠
* 主要是實現抽象工廠中的抽象方法,完成具體產品的建立。
*/public class iphonefactory extends abstractphonefactory
}/**
* xiaomi 生產工廠
* 主要是實現抽象工廠中的抽象方法,完成具體產品的建立。
*/public class xiaomifactory extends abstractphonefactory
}
public class test
}
華為撥打**
iphone撥打**
小公尺撥打**
可以看出效果其實和簡單工廠模式差不多,但是相比簡單工廠模式,工廠類(抽象工廠)不再負責例項的建立工作,而是交由工廠類的子類(具體工廠)來處理,同時如果新增新的手機型別,工廠模式不需要在原有的**上做修改,只需要新增相關的具體工廠和實體類就好,符合了開閉原則。 工廠方法模式 工廠方法模式
工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...
工廠方法模式 應用最廣
工廠方法模式 應用最廣 定義乙個用於建立物件的介面,讓子類決定例項化哪個類。在任何需要生成複雜物件的地方,都可以使用工廠方法模式。用new就可以完成的建立無需要使用工廠方法模式。工廠方法四大模組 抽象工廠角色具體工廠角色抽象產品角色具體產品角色。這個和下乙個模式抽象工廠方法模式裡是一樣的,都有四類角...
工廠方法模式 工廠方法模式 二
工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...