一. 簡單工廠
其實它不是一個設計模式,反而比較像是一種編程習慣,由于經常被使用,有些人把這個習慣誤認為是"工廠模式",在談論工廠模式前,先將簡單工廠熟悉一下;
二. 簡單工廠的UML類圖如下:
![](http://dl.iteye.com/upload/attachment/408063/d1fdff1f-c015-3c90-b530-0739c591ad8b.jpg)
![](http://dl.iteye.com/upload/attachment/408083/8bed6cc2-f518-32e2-99be-1c8c8ad014f2.jpg)
三.在此用一個事例說明簡單工廠的用法: 在一個酒店里可以做出多種名菜.完整示例代碼如下:
1. 菜肴的加工過程
package creationalPattern.factory.simple;
/**
* 名菜加工過程
* @author Liyongbin
* @date 2011-02-06
*/
public interface ICuisine {
//原料採購
public String purchase();
//烹調加工
public String processing();
//成品銷售
public String vendition();
}
2. 川菜的做法
package creationalPattern.factory.simple;
/**
* 川菜類
* @author Liyongbin
* @date 2011-02-06
*/
public class SichuanCuisine implements ICuisine{
@Override
public String purchase() {
return "川菜原料採購";
}
@Override
public String processing() {
return "川菜烹調加工";
}
@Override
public String vendition() {
return "川菜成品銷售";
}
}
湘菜的做法:
package creationalPattern.factory.simple;
/**
* 湘菜類
* @author Liyongbin
* @date 2011-02-06
*/
public class HunanCuisine implements ICuisine{
@Override
public String purchase() {
return "湘菜原料採購";
}
@Override
public String processing() {
return "湘菜烹調加工";
}
@Override
public String vendition() {
return "湘菜成品銷售";
}
}
粵菜的做法:
package creationalPattern.factory.simple;
/**
* 粵菜類
* @author Liyongbin
* @date 2011-02-06
*/
public class ContoneseCuisine implements ICuisine{
@Override
public String purchase() {
return "粵菜原料採購";
}
@Override
public String processing() {
return "粵菜烹調加工";
}
@Override
public String vendition() {
return "粵菜成品銷售";
}
}
3.菜肴烹調工廠[簡單工廠]
package creationalPattern.factory.simple;
/**
* 菜肴烹調工廠
* @author Liyongbin
* @date 2011-02-06
*/
public class CuisineFactory {
//制作菜肴的方法
public ICuisine cooking(String type){
ICuisine cuisine=null;
if (type.equalsIgnoreCase("Hunan")) {//湘菜
cuisine=new HunanCuisine();
} else if(type.equalsIgnoreCase("Sichuan")){//川菜
cuisine=new SichuanCuisine();
} else if(type.equalsIgnoreCase("Guangdong")){//粵菜
cuisine=new ContoneseCuisine();
}
return cuisine;
}
}
4. 酒店
package creationalPattern.factory.simple;
/**
* 香格裡拉酒店
* @author Administrator
*
*/
public class ShangriLaHotel {
CuisineFactory cf= new CuisineFactory();
/**
* 訂單方法
* @param localCuisine預訂的地方菜
*/
public void order(String localCuisine){
ICuisine cuisine=cf.cooking(localCuisine);
System.out.print(cuisine.purchase()+"|");
System.out.print(cuisine.processing()+"|");
System.out.println(cuisine.vendition());
}
}
5. 簡單工廠的測試
package creationalPattern.factory.simple;
public class SimpleFactoryTest {
/**
* 簡單工廠測試方法
* @param args
*/
public static void main(String[] args) {
ShangriLaHotel slh = new ShangriLaHotel();
slh.order("Sichuan");
slh.order("Hunan");
slh.order("Guangdong");
}
}
6. 運行結果如下:
![](http://dl.iteye.com/upload/attachment/408079/37913c69-246f-3a5e-91ae-21fcafebd427.jpg)
![](http://dl.iteye.com/upload/attachment/408065/f4d1e846-64ec-3ecd-b763-b019561aa721.jpg)