Java中的簡單工廠模式

轉自:http://www.blogjava.net/jzgl-ever/archive/2008/07/26/217704.html


實例1:

package org.jzkangta.factorydemo01;
//定義接口
interface Car{
    public void run();
    public void stop();
}

//具體實現類
class Benz implements Car{
    public void run(){
        System.out.println("Benz開始啓動了。。。。。");
    }

    public void stop(){
        System.out.println("Benz停車了。。。。。");
    }

}

//具體實現類
class Ford implements Car{
    public void run(){
        System.out.println("Ford開始啓動了。。。");
    }

    public void stop(){
        System.out.println("Ford停車了。。。。");
    }

}

//工廠
class Factory{
    public static Car getCarInstance(){
        return new Ford();
    }

}

public class FactoryDemo01 {

    public static void main(String[] args) {
        Car c=Factory.getCarInstance();
        c.run();
        c.stop();

    }


}


實例二:
package fac;


//定義接口
interface Car{
    public void run();
    public void stop();
}

//具體實現類
class Benz implements Car{
    public void run(){
        System.out.println("Benz開始啓動了。。。。。");
    }

    public void stop(){
        System.out.println("Benz停車了。。。。。");
    }

}


class Ford implements Car{
    public void run(){
        System.out.println("Ford開始啓動了。。。");
    }

    public void stop(){
        System.out.println("Ford停車了。。。。");
    }

}

//工廠
class Factory{
    public static Car getCarInstance(String type){
        Car c=null;
        if("Benz".equals(type)){
            c=new Benz();
        }

        if("Ford".equals(type)){
            c=new Ford();
        }

        return c;
    }

}



public class FactoryDemo02 {

    public static void main(String[] args) {
        Car c=Factory.getCarInstance("Benz");
        if(c!=null){
            c.run();
            c.stop();
        }
else{
            System.out.println("造不了這種汽車。。。");
        }

        

    }


}



實例三:
interface Car{
    public void run();
    public void stop();
}


class Benz implements Car{
    public void run(){
        System.out.println("Benz開始啓動了。。。。。");
    }

    public void stop(){
        System.out.println("Benz停車了。。。。。");
    }

}


class Ford implements Car{
    public void run(){
        System.out.println("Ford開始啓動了。。。");
    }

    public void stop(){
        System.out.println("Ford停車了。。。。");
    }

}


class Toyota implements Car{
    public void run(){
        System.out.println("Toyota開始啓動了。。。");
    }

    public void stop(){
        System.out.println("Toyota停車了。。。。");
    }

}


class Factory{
    public static Car getCarInstance(String type){
        Car c=null;
        try {
            c=(Car)Class.forName("org.jzkangta.factorydemo03."+type).newInstance();//利用反射得到汽車類型 
        }
 catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    
        return c;
    }

}

public class FactoryDemo03 {

    public static void main(String[] args) {
        Car c=Factory.getCarInstance("Toyota");
        if(c!=null){
            c.run();
            c.stop();
        }
else{
            System.out.println("造不了這種汽車。。。");
        }

        

    }


}




對比三個實例:
實例一,雖然實現了簡單工廠,但每次只能得到一種汽車,如果我們想換一種,就得修改工廠,太不方便,而實例二則改變了這種情況,便得我們可以按照我們的需要更換汽車,但我們所更換的汽車必須是實現類中有的,如果我們想要增加一種汽車的時候,我們還是得更改工廠,通過改進,實例三利用反射機制,得到汽車類型,這樣當我們需要增加一種新的汽車時,就無需要再修改工廠,而只需要增加要實現的類即可。也就是說要增加什麼樣的汽車直接增加這個汽車的類即可,而無需改變工廠。從而達到了工廠分離的效果。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章