設計模式學習筆記----工廠模式

工廠模式的好處:
通過工廠模式可以將產品的實例化封裝起來,調用者不需要關心產品的實例化過程,方便了當開發者對產品的實例化進行修改時,不需讓調用者參與。

抽象產品類:

public abstract class Product {
    public abstract void color();
}

具體產品類A:

public class ConcretePrductA extends Product{
    @Override
    public void color() {
        System.out.println("紅色");
    }
}

具體產品類B:

public class ConcretePrductB extends Product{
    @Override
    public void color() {
        System.out.println("綠色");
    }
}

抽象工廠類

public abstract class Factory {
    public abstract <T extends Product> T createProduct(Class<T> clz);
}

具體工廠類

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

上述代碼我們通過利用反射來更簡潔的生產具體產品對象,只需要在工廠方法的參數列表中傳入一個Class類就可以決定究竟是要哪一個產品。

調用方式:

Factory factory = new ConcreteFactory();
Product p = factory.createProduct(ConcretePrductA.class);
p.color();

除了該種方法還可以通過創建多個具體工廠來生產具體產品,即多工廠方法模式。

public class ConcreteFactoryA extends Factory{
    @Override
    public Product createProduct() {
        return new ConcretePrductA();
    }
}
public class ConcreteFactoryB extends Factory{
    @Override
    public Product createProduct() {
        return new ConcretePrductB();
    }
}
Factory factoryA = new ConcreteFactoryA();
Product pA = factoryA.createProduct();
pA.color();
Factory factoryB = new ConcreteFactoryB();
Product pB = factoryB.createProduct();
pB.color();

另外如果確定只需一個工廠類,可以寫爲:

public class Factory{
    public <T extends Product> T createProduct(Class<T> clz) {
        Product p = null;
        try{
            p = (Product) Class.forName(clz.getName()).newInstance();
        }catch (Exception e){
            e.printStackTrace();
        }
        return (T)p;
    }
}

該種方法即爲簡單工廠模式。

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