工廠模式是設計模式最為常用的模式之一,此模式可以想像你有一家工廠需要生產那些產品(既物件),
工廠模式定義
利用介面或是抽象物件來定義產品的明細或操作,再利用工廠對產品產生實例
工廠模式用法
- 當有很多產品是有共同的特性可以利用介面抽離出來,在使用工廠的new實例
工廠模式案例
我們定義IProduct為車的抽象類別,再利用CarFactory來指定需要產生哪種車款
/** * Name: IProduct.java * Description : 產品抽象物件 * Created by blackbryant on 2017/1/9. */ public abstract class IProduct { protected abstract String getName() ; protected abstract List getColor() ; protected abstract List getOperate(); }
/** * Name: MPV.java * Description : SUV * Created by bryant on 2017/1/9. */ public class MPV extends IProduct { @Override protected String getName() { return "MPV"; } @Override protected List getColor() { List colors = new ArrayList(); colors.add("紅"); colors.add("藍"); colors.add("鐵灰"); return colors; } @Override protected List getOperate() { List operates = new ArrayList(); operates.add("煞車"); operates.add("加速"); operates.add("導航"); return operates; } }
/** * Name: SUV.java * Description : SUV * Created by bryant on 2017/1/9. */ public class SUV extends IProduct { @Override protected String getName() { return "SUV"; } @Override protected List getColor() { List colors = new ArrayList(); colors.add("紅"); colors.add("藍"); colors.add("鐵灰"); return colors; } @Override protected List getOperate() { List operates = new ArrayList(); operates.add("煞車"); operates.add("加速"); operates.add("導航"); operates.add("省油"); return operates; } }
/** * Name: CarFactory.java * Description : 汽車工廠,產生MPV和SUV汽車 * Created by bryant on 2017/1/9. */ public class CarFactory { public T createCar(Class cls){ IProduct product = null ; try{ product = (IProduct) Class.forName(cls.getName()).newInstance() ; }catch (Exception ex){ ex.printStackTrace(); } return (T) product ; } //主程式測試 public static void main(String[] args){ CarFactory carFactory = new CarFactory(); IProduct product = carFactory.createCar(MPV.class) ; System.out.println("car style:"+product.getName()); for(String color:product.getColor()){ System.out.println("color:"+color); } } }
輸出: car style:MPV
color:紅,藍,鐵灰,operate:煞車,加速,導航,
car style:SUV
color:紅,藍,鐵灰,operate:煞車,加速,導航,省油,
留言
張貼留言