針對上例中的缺點,使用工廠方法模式就可以完美的解決,完全遵循開閉原則。
定義乙個用於建立物件的介面,讓子類決定例項化哪個產品類物件。工廠方法使乙個產品類的例項化延遲到其工廠的子類。
工廠方法模式的主要角色:
使用工廠方法模式對上例進行改進,類圖如下:
* @description: 咖啡類
* @author: dym
*/public abstract class coffee
//加奶
public void addmilk()
}
package com.itheima.pattern.factory.factory_method;
/** * @version v1.0
* @classname: americancoffee
* @description: 沒事咖啡
* @author: dym
*/public class americancoffee extends coffee
}
package com.itheima.pattern.factory.factory_method;
/** * @version v1.0
* @classname: lattecoffee
* @description: 拿鐵咖啡
* @author: dym
*/public class lattecoffee extends coffee
}
package com.itheima.pattern.factory.factory_method;
/** * @version v1.0
* @classname: coffeefactory
* @description: coffeefactory : 抽象工廠
* @author: dym
*/public inte***ce coffeefactory
package com.itheima.pattern.factory.factory_method;
/** * @version v1.0
* @classname: lattecoffeefactory
* @description: 拿鐵咖啡工廠,專門用來生產拿鐵咖啡
* @author: dym
*/public class lattecoffeefactory implements coffeefactory
}
package com.itheima.pattern.factory.factory_method;
/** * @version v1.0
* @classname: americancoffeefactory
* @description: 美式咖啡工廠物件,專門用來生產美式咖啡
* @author: dym
*/public class americancoffeefactory implements coffeefactory
}
package com.itheima.pattern.factory.factory_method;
/** * @version v1.0
* @classname: coffeestore
* @description: todo(一句話描述該類的功能)
* @author: dym
*/public class coffeestore
//點咖啡功能
public coffee ordercoffee()
}
package com.itheima.pattern.factory.factory_method;
/** * @version v1.0
* @classname: client
* @description: todo(一句話描述該類的功能)
從以上的編寫的**可以看到,
要增加產品類時也要相應地增加工廠類,不需要修改工廠類的**了,
這樣就解決了簡單工廠模式的缺點。
工廠方法模式是簡單工廠模式的進一步抽象。
由於使用了多型性,工廠方法模式保持了簡單工廠模式的優點,而且克服了它的缺點。
優點:
缺點:
工廠方法模式 工廠方法模式
工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...
工廠方法模式 工廠方法模式 二
工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...
工廠方法模式(一) 簡單工廠方法模式
ps 第二篇學習部落格,堅持就是勝利。繼續設計模式的學習,記錄工廠模式,加深自己的理解。基本結構 abstractproduct 用來定義基本的商品的抽象 public abstract class abstractphoneproduct 用來實現抽象商品,生成各種商品 public class ...