最近面試被問了工廠模式,有些忘卻,自己總結一下:
工廠模式:定義一個用於創建對象的接口,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類。
舉個例子:公司有個這樣一個需求,在App中要使用到LBS定位來實現某些功能。既可以用百度地圖api,也可使用高德地圖api,但是公司領導想要都用,看哪個好用用哪一個。這樣就用到工廠模式了,我兩個都給你設計,代碼設個開關和參數,只要改個參數,就換地圖api。
public class test {
public static void main(String[] args) {
Location position= new Factory().getInstance("gaode");
position.getCity();
}
}
class Factory{
public static Location getInstance(String type){
if("baidu".equals(type)){
return new BaiduLocation();
}else {
return new GaodeLocation();
}
}
}
class BaiduLocation implements Location{
@Override
public void getCity() {
// TODO Auto-generated method stub
System.out.println("百度-城市");
}
}
class GaodeLocation implements Location{
@Override
public void getCity() {
// TODO Auto-generated method stub
System.out.println("高德-城市");
}
}
interface Location{
public void getCity();
}
Factory是一個工廠類,通過getInstance的參數決定了創建的類,用來區分高德和百度。Location是一個接口,它抽象定義了BaiduLocation和GaodeLocation的函數調用。調用者能夠任意通過改變參數,來實現來自不同定位API的需求。
使用工廠模式的好處是:耦合度變低,從工廠類中取對象;