工廠模式是設計模式最為常用的模式之一,此模式可以想像你有一家工廠需要生產那些產品(既物件),
工廠模式定義
利用介面或是抽象物件來定義產品的明細或操作,再利用工廠對產品產生實例
工廠模式用法
- 當有很多產品是有共同的特性可以利用介面抽離出來,在使用工廠的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:煞車,加速,導航,省油,
留言
張貼留言