(三)工廠模式

國慶期間去東北參加了朋友的婚禮,時光飛逝呀,人生漫長又短暫,要給自己找點有樂趣的事情去做。

以下實踐來自實驗樓,鏈接:https://www.shiyanlou.com/courses/100/learning/?id=865

什麼是工廠模式?

工廠一般指生產特定產品的平臺,那麼類似的,工廠模式可以將其類比爲一個工廠,指生產特定類型的對象的一種模式。工廠模式封裝了創建對象的細節,使用者只使用對象就可以。

工廠模式分類:

普通工廠模式、多個工廠模式、靜態工廠方法模式

普通工廠模式示例:

實現代碼:

// 二者共同的接口
interface Human{
    public void eat();
    public void sleep();
    public void beat();
}

// 創建實現類 Male
class Male implements Human{
    public void eat(){
        System.out.println("Male can eat."); 
    }
    public void sleep(){
        System.out.println("Male can sleep.");
    }
    public void beat(){
        System.out.println("Male can beat.");
    }
} 
//創建實現類 Female
class Female implements Human{
    public void eat(){
        System.out.println("Female can eat."); 
    }
    public void sleep(){
        System.out.println("Female can sleep.");
    }
    public void beat(){
        System.out.println("Female can beat.");
    }
} 

// 創建普通工廠類
class HumanFactory{
    public Human createHuman(String gender){
        if( gender.equals("male") ){
           return new Male();
        }else if( gender.equals("female")){
           return new Female();
        }else {
            System.out.println("請輸入正確的類型!");
            return null;
        }
    }
}

// 工廠測試類
public class FactoryTest {
    public static void main(String[] args){
        HumanFactory factory = new HumanFactory();
        Human male = factory.createHuman("male");
        male.eat();
        male.sleep();
        male.beat();
    }
}

編譯後運行即可。

多個工廠模式示例:

// 多個工廠方法
public class HumanFactory{
    public Male createMale() {
        return new Male();
    }
    public Female createFemale() {
        return new Female();
    }
}

// 工廠測試類
public class FactoryTest {
    public static void main(String[] args){
        HumanFactory factory = new HumanFactory();
        Human male = factory.createMale();
        male.eat();
        male.sleep();
        male.beat();
    }
}

靜態工廠方法模式示例:

// 多個工廠方法
public class HumanFactory{
    public static Male createMale() {
        return new Male();
    }
    public static Female createFemale() {
        return new Female();
    }
}

// 工廠測試類
public class FactoryTest {
    public static void main(String[] args){
        Human male = HumanFactory.createMale();
        male.eat();
        male.sleep();
        male.beat();
    }
}

如上,可以看到,工廠模式只有一個創建函數,多個工廠模式有多個創建函數,靜態工廠模式將多個工廠模式的創建函數設置爲靜態。第一種在使用時需要記住傳入的字符,第二種需要實例化對象,因此使用最多的是第三種方法。

應用舉例:

java中應用舉例:

java.util.Calendar - getInstance()
java.util.Calendar - getInstance(TimeZone zone)
java.util.Calendar - getInstance(Locale aLocale)
java.util.Calendar - getInstance(TimeZone zone, Locale aLocale)
java.text.NumberFormat - getInstance()
java.text.NumberFormat - getInstance(Locale inLocale)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章