工廠模式實現了建立者和呼叫者的分離,工廠模式分為簡單工廠模式、工廠模式、抽象工廠模式。
工廠模式有很多的應用場景
1、jdk中calendar的getinstance()方法。
2、jdbc中connection物件的獲取。
3、spring中ioc容器建立者管理bean物件
4、xml解析時的documentbuilde***ctory建立解析器物件
5、反射中class物件是newinstance()。
下面,我們先來介紹一下工廠模式
簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。
public inte***ce operation
public class add implements operation}
public class sub implements operation}
public class mul implements operation}
public class div implements operation
return numbera / numberb;
}}public class easyfactory
return operationobj;
}}public class client
}
簡單工廠模式用工廠類方法代替new操作,將選擇實現類,建立物件進行統一管理和控制
缺點:如果需要在方法裡寫很多與物件建立有關的業務**,而且需要的建立的物件還不少的話,我們要在這個簡單工廠類裡編寫很多個方法,這樣就導致耦合性比較高。
對於簡單工廠模式的缺點,工廠方法模式中是乙個子類對應乙個工廠類,而這些工廠類都實現於乙個抽象介面。
abstract class car
public void setname(string name)
} class benz extends car
} class bmw extends car
}
abstract class driver
class benzdriver extends driver
} class bmwdriver extends driver
}
public class boss
}
這裡我們不難看出,定義了乙個抽象產品類,其中有兩個類實現了這個抽象類,有定義了乙個工廠類,通過繼承這個工廠類分別實現例項化產品類,這就大大降低了耦合
它和工廠方法模式的區別就在於需要建立物件的複雜程度上。而且抽象工廠模式是三個裡面最為抽象、最具一般性的。抽象工廠模式的用意為:給客戶端提供乙個介面,可以建立多個產品族中的產品物件。
//抽象產品(bmw和audi同理)
abstract class benzcar
public void setname(string name)
} //具體產品(bmw和audi同理)
class benzsportcar extends benzcar
} class benzbusinesscar extends benzcar
}
abstract class bmwcar
public void setname(string name)
} class bmwsportcar extends bmwcar
} class bmwbusinesscar extends bmwcar
}
abstract class audicar
public void setname(string name)
} class audisportcar extends audicar
} class audibusinesscar extends audicar
}
//抽象工廠
abstract class driver3
//具體工廠
class sportdriver extends driver3
public bmwcar createbmwcar(string car) throws exception
public audicar createaudicar(string car) throws exception
} class businessdriver extends driver3
public bmwcar createbmwcar(string car) throws exception
public audicar createaudicar(string car) throws exception
}
//老闆
public class bossabstractfactory
}
這裡我們是不方便擴充套件的,不妨我們用反射+簡單工廠來改進抽象工廠
abstract class benzcar
public void setname(string name)
} class benzsportcar extends benzcar
} class benzbusinesscar extends benzcar
}
abstract class bmwcar
public void setname(string name)
} class bmwsportcar extends bmwcar
} class bmwbusinesscar extends bmwcar
}
abstract class audicar
public void setname(string name)
} class audisportcar extends audicar
} class audibusinesscar extends audicar
}
/**
* 簡單工廠通過反射改進抽象工廠及其子工廠
* @author administrator
* */
class driver3
public static bmwcar createbmwcar(string car) throws exception
public static audicar createaudicar(string car) throws exception
} //客戶端
public class ******andabstractfactory
}
工廠模式總結
工廠類判斷要生產什麼產品並呼叫相應的建構函式。當增加新產品時就要修改工廠類,這違反了 軟體實體 類 模組 函式 可以擴充套件,但是不可修改 的開放封閉原則。產品基類有純虛函式。產品子類繼承產品基類。工廠類中有生產函式。使用方法 建立產品基類指標,建立工廠物件,呼叫工廠物件的生產函式,套入產品型別引數...
簡單工廠模式總結
簡單工廠模式提供了專門的工廠類用於建立物件,將物件的建立和物件的使用分離開,它作為一種最簡單的工廠模式在軟體開發中得到了較為廣泛的應用。1.主要優點 簡單工廠模式的主要優點如下 1 工廠類包含必要的判斷邏輯,可以決定在什麼時候建立哪乙個產品類的例項,客戶端可以免除直接建立產品物件的職責,而僅僅 消費...
設計模式個人總結 工廠模式
1.為什麼需要設計模式 模式即是方法,解決問題有好壞。在功能實現的基礎上我們要求做到設計更好,所以有了設計模式!2.工廠模式的學習 看到的例子裡說有乙個類有很多子類,需要例項化的同時,為了避免若干個問題 1.為了 的封裝性和隱藏性 2為了避免雜亂.3.為了秉承物件導向的精神裡的高內聚,低偶合。還有什...