簡單工廠

工廠方法模式(一) 簡單工廠模式

定義 定義一個用於創建對象的接口,讓子類去決定實例化哪個類。

在任何需要生成複雜對象的地方呢 都可以使用工廠模式。複雜對象適合使用工廠模式,用new 就
可以完成創建的對象無需使用工廠模式。

我們來看一下使用工廠模式的代碼 

//抽象工廠
public abstract class Factory {

        /**
         * 工廠類的抽象方法  具體生產什麼由子類去實現
         * @return
         */
            public abstract Product create();

}


//抽象產品類
public abstract class Product {

    /**
     * 產品類的抽象方法   由具體產品類去實現
     */
    public abstract void say();
}

//具體產品A
public class ProductA extends Product {
    @Override
    public void say() {
        System.out.println("我是A");
    }
}

//具體產品B
public class ProductB extends Product {
    @Override
    public void say() {
        System.out.println("我是B");
    }
}

//具體工廠類A

public class CreateA extends Factory {
    @Override
    public Product create() {
        return new ProductA();
    }
}

//具體工廠類B

public class CreateB extends Factory {
    @Override
    public Product create() {
        return new ProductB();
    }
}

//客戶類

public class Client {

public static void main(String[] args){
    Factory factory = new CreateA();
    Product productA = factory.create();
    productA.say();

    Factory factory1 = new CreateB();
    Product product1 = factory1.create();
    product1.say();
    }
}

這裏的幾個角色都很簡單主要分爲四大模塊 : 
(1)抽象工廠  其爲工廠方法模式的核心
(2)具體工廠 其實現了具體的業務邏輯
(3)抽象產品 是工廠方法模式所創建的產品的父類
(4)具體產品  爲實現抽象產品的某個具體產品的對象

上述代碼比較常見,需要生產哪一個就生產哪一個,有時候也可以利用反射的方式更簡潔的來生產具體的產品對象

public abstract class FactoryF {

    /**
     *
     * @param clz 產品對象類類型
     * @param <T>
     * @return
     */
    public abstract <T extends Product> T creat(Class<T> clz); //傳入一個class類來決定是哪一個產品類
}


對於具體的工廠類  通過反射獲取類的實例

public class CreatF extends FactoryF {
    @Override
    public <T extends Product> T creat(Class<T> clz) {
        Product p = null;
        try {
            p = (Product) Class.forName(clz.getName()).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (T) p;
    }
}

public class Client {

public static void main(String[] args){ 

        FactoryF factoryF = new CreatF();
        Product p = factoryF.creat(ProductA.class);
        p.say();

        Product b = factoryF.creat(ProductB.class);
        b.say();

    }
}   

想生產哪個產品就傳入哪個產品
這種方法比較簡潔 動態 。

像這種方式就是簡單工廠模式或靜態工廠模式  他是工廠模式的一個弱化版本
到這裏可以發現 工廠模式是完全符合設計規則  其降低了對象之間的耦合度。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章