工廠模式主要是為創建對象提供過渡接口,以便將創建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。這也是對象與過程分離的技術提現了oo思想
一般我們將工廠模式分為一下三種:
1)簡單工廠模式(Simple Factory)
2)工廠方法模式(Factory Method)
3)抽象工廠模式(Abstract Factory)
簡單工廠模式:簡單工廠模式又稱靜態工廠方法模式。它存在的目的很簡單:定義一個用於創建對象的接口。
它的組成:
工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯。
抽象產品角色:它一般是具體產品繼承的父類或者實現的接口,要實現什么功能。
具體產品角色:工廠類所創建的對象就是此角色的實例,具體類的實現,是提現產品的實際功能。
下面講一個實例,相信很多人已經看過:
話說十年前,有一個暴發戶,他家有三輛汽車——Benz奔馳、Bmw寶馬、Audi奧迪,還雇了司機為他開車。不過,暴發戶坐車時總是怪怪的:上Benz車后跟司機說“開奔馳車!”,坐上Bmw后他說“開寶馬車!”,坐上Audi說“開奧迪車!”。你一定說:這人有病!直接說開車不就行了?!
而當把這個暴發戶的行為放到我們程序設計中來時,會發現這是一個普遍存在的現象。幸運的是,這種有病的現象在OO(面向對象)語言中可以避免了。下面就以C#語言為基礎來引入我們本文的主題:工廠模式的工廠方法。
//抽象產品角色
public interface Car
{
string drive();
}
//具體產品角色,具體類的實現
public class BenzCar : Car
{
public string drive()
{
return "Driving Benz";
}
}
public class BmwCar : Car
{
public string drive()
{
return "Driving Bmw";
}
}
//工廠類角色,本模式的核心 選擇實體工廠
public static Car DriverCar(string category)
{
switch(category)
{
case "Benz":
return new BenzCar();
break;
case "BmwCar":
return new BmwCar();
break;
default: return null;
}
}
//這里用戶只需選擇要開什么車就ok啦
protected void Page_Load(object sender, EventArgs e)
{
Car car = Driver.DriverCar("Benz");
Response.Write(car.drive());
}
工廠部分好像不太理想,因為每增加一輛車,都要在工廠類中增加相應的業務邏輯或者判斷邏輯。抽象工廠模式能改變這一點。也就可以用條件外置(在web.config里面配置)和反射(加載實體的產品)來實現