簡單工廠模式
在前面的博客簡單工廠模式和策略模式的應用的前半部分,提到過簡單工廠模式,我們知道,簡單工廠模式的主要優點在於封裝了對象的創建過程,很大程度上實現了低耦合,但是,我們也能清晰的看到,當需要擴展新的功能時,我們不得不修改工廠類,這種做法實則違反了“開放--封閉”原則 。爲了解決這一問題,我們引入工廠方法模式。
工廠方法模式:定義一個用於創建對象的接口,讓子類決定實例化哪一個類,工廠方法類使得一個類的實例化對象延遲到其子類。
工廠方法模式的結構圖
由上述結構我們可以看出工廠方法類是將工廠類中實例化對象的過程轉移到其子類,這樣做,在有效的封裝了對象的創建過程的基礎上,也符合了“開放--封閉”原則。
工廠方法模式實現代碼
如下:
interface Fruit{
public void result( );
}
interface Factory{
public Fruit getfruit();
}
/*
* 以下類均實現了具體類的接口
*/
class Apple implements Fruit{
public void result( ) {
System.out.println("吃蘋果!");
}
}
class Orange implements Fruit{
public void result( ) {
System.out.println("吃橘子!");
}
}
class Banana implements Fruit{
public void result( ) {
System.out.print("吃香蕉!");
}
}
/*
* 以下的類實現了工廠接口
*/
class AppleFactory implements Factory{
public Fruit getfruit() {
// TODO Auto-generated method stub
return new Apple();
}
}
class OrangeFactory implements Factory{
public Fruit getfruit() {
// TODO Auto-generated method stub
return new Orange();
}
}
class BananaFactory implements Factory{
public Fruit getfruit() {
// TODO Auto-generated method stub
return new Banana();
}
}
public class FactoryFunction {
public static void main(String[] args) {
// TODO Auto-generated method stub
Factory factory = new AppleFactory();
Fruit fruit = factory.getfruit();
fruit.result();
}
}
雖然工廠方法模式符合了“開放--封閉原則”,但是也因此增大了開發量,之後,我們會介紹應用反射技術的工廠模式。