工廠模式

(一)需求場景

生活中具體產品的構建都是由工廠來生產的,根據不同的條件會生產出不同的產品出來.假如需要一輛汽車,可以直接從工廠裏面提貨,而不用去管這輛汽車是怎麼做出來的,以及這個汽車裏面的具體實現。

(二)基本介紹

簡單工廠模式是屬於創建型模式,是工廠模式的一種。簡單工廠模式是由一
個工廠對象決定創建出哪一種產品類的實例。簡單工廠模式是工廠模式家族
中最簡單實用的模式
簡單工廠模式:定義了一個創建對象的類,由這個類來封裝實例化對象的行
爲(代碼)
在軟件開發中,當我們會用到大量的創建某種、某類或者某批對象時,就會
使用到工廠模式

(三)工作原理

1:工廠方法模式將對象的實例化推遲到子類,創建過程在其子類執行.
2: 作爲一種創建類模式,在任何需要生成複雜對象的地方,都可以使用工廠方法模式。有一點需要注意的地方就是複雜對象適合使用工廠模式,而簡單對象,特別是只需要通過 new 就可以完成創建的對象,無需使用工廠模式。如果使用工廠模式,就需要引入一個工廠類,會增加系統的複雜度
3:工廠模式缺點是違反了設計模式的ocp原則,即對擴展開放,對修改關閉.如果需要新增產品,那麼就需要修改創建工廠中的方法.

(四)代碼實例

在這裏插入圖片描述
當前代碼實例模擬一個創建Human對象實例的工廠模式,其中產品包括Male和Female,在HumanFactory.createHuman通過用戶給予性別來生成不同的實例

//Human接口,工廠產品基類,定義產品基本的功能
public interface Human {

    public void eat();
    public void sleep();
    public void beat();
}
//Male實現Human,特定的產品,實現具體的功能
public  class Male implements Human{
    @Override
    public void eat(){
        System.out.println("Male can eat");
    }
    @Override
    public void sleep(){
        System.out.println("Male can sleep");
    }
    @Override
    public void beat(){
        System.out.println("Male can beat");
    }
}
public class Female implements Human {
    @Override
    public void eat() {
        System.out.println("Female can eat");
    }

    @Override
    public void sleep() {
        System.out.println("Female can sleep");
    }

    @Override
    public void beat() {
        System.out.println("Female can beat");
    }
}
// 普通工廠類(創建Human對象)
public class HumanFactory {
    public Human createHuman(String gender) {
        if (gender.equals("male")) {
            return new Male();
        } else if (gender.equals("female")) {
            return new Female();
        } else {
            return null;
        }
    }
}

/**
 * 測試類,工廠根據性別創建不同對象
 **/
public class Main {

    public static void main(String[] args){
        HumanFactory factory = new HumanFactory();
        Human male = factory.createHuman("male");
        male.eat();
        male.sleep();
        male.beat();
    }
}

在這裏插入圖片描述

(五)應用實例

1:Hibernate 換數據庫只需換方言和驅動就可以
2:在 Java 庫裏面。根據不同的參數,getInstance() 方法會返回不同的 Calendar 對象。

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