最近開始學習java中的設計模式。相信這是每一個編碼人員必須要掌握的。至於推薦的資料,相信大家在百度上一搜就ok。閒話少說。now,begin
簡單工廠模式--簡單來說是指生產者根據不同不同的要求生產不同的產品。
舉例:果園裏有很多水果,比如:蘋果,香蕉。
他們具有共同的行爲:可以吃,可以種植,可以銷售。
此外,還有一個管理人員果農,他管理這果園。
結構圖如下:
1.抽象方法:
public interface Fruit { public void eat(); public void plant(); public void sell(); }
2.具體的產品類:
package com.sf.entity; import com.sf.jk.Fruit; public class Apple implements Fruit { public Apple(){ System.out.println("生產水果"); } public void eat() { System.out.println("蘋果可以吃"); } public void plant() { // TODO Auto-generated method stub System.out.println("蘋果可以種"); } public void sell() { // TODO Auto-generated method stub System.out.println("蘋果可以賣"); } }
package com.sf.entity; import com.sf.jk.Fruit; public class Banana implements Fruit{ public Banana(){ System.out.println("生產香蕉"); } public void eat() { // TODO Auto-generated method stub System.out.println("香蕉可以吃"); } public void plant() { // TODO Auto-generated method stub System.out.println("香蕉可以種"); } public void sell() { // TODO Auto-generated method stub System.out.println("香蕉可以賣"); } }
3.定義一個管理員
package com.sf.hf; import com.sf.entity.Apple; import com.sf.entity.Banana; import com.sf.jk.Fruit; public class FruitFactory { public static Fruit createFruit(String fruit){ if(fruit.equals("apple")){ return new Apple(); }else if (fruit.equals("banana")) { return new Banana(); }else { return null; } } }
4.在生產具體水果的時候,客戶端只需要調用FruitFactory 中的靜態方法就可
import com.sf.entity.Apple; import com.sf.entity.Banana; import com.sf.hf.FruitFactory; import com.sf.jk.Fruit; public class Test { public static void main(String[] args) { System.out.println("---------創建蘋果---------"); Fruit apple = FruitFactory.createFruit("apple"); apple.eat(); apple.plant(); System.out.println("---------創建香蕉---------"); Fruit banana = FruitFactory.createFruit("banana"); banana.eat(); banana.plant(); } }
5.運行結果如下:
---------創建蘋果--------- 生產水果 蘋果可以吃 蘋果可以種 ---------創建香蕉--------- 生產香蕉 香蕉可以吃 香蕉可以種
簡單工廠模式的優缺點:
優點:模式的核心是工廠類。這個類含有必要的判斷邏輯,可以決定創建哪一個產品類的實例。而客戶端免去了直接創建產品對象的責任,而僅僅負責“消費”產品。簡
單工廠模式通過這種做法實現了對責任的分割。
缺點:當產品類有複雜的多層次等級結構時,工廠類只有他自己。由於工廠類集中了所有產品創建邏輯的,如果不能正常工作的話會對系統造成很大的影響。如果使用常
規的判斷方法,在工廠里根據傳入的參數的不同而實例化產品對象的話,代碼是不可用的,因爲如果增加新產品必須修改工廠角色的源碼,不利於以後的維護。