1. 程式人生 > >設計模式之—2.工廠方法模式

設計模式之—2.工廠方法模式

eat oid com 靜態 () img clas image 簡單工廠模式

1.工廠方法模式定義

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

2.通用實現方式

工廠方式通用實現方式類圖如下:
技術分享圖片

其中Product定義了產品的共性,是對事物的抽象,Creator為抽象創建類,即抽象工廠,具體如何創建實例由實現類決定。代碼如下所示:

Product類:

public abstract class Product {

    /**
     * 產品名稱
     */
    private String name = "";

    /**
     * 產品價格
     */
    private String price = "";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Product{" +
                "name='" + name + '\'' +
                ", price='" + price + '\'' +
                '}';
    }
}

Creator類:

public abstract class Creator {

    /**
     * @param c 需要具體創建的具體產品
     * @param <T> Product的實現類
     * @return 實例對象
     */
    public abstract <T extends Product> T create(Class<T> c);
}

具體的實現類:

public class ConcreteCreator extends Creator {

    @Override
    public <T extends Product> T create(Class<T> c) {

        Product product = null;
        try {

            product = (Product) Class.forName(c.getName()).newInstance();

        } catch (Exception e) {

        }
        return (T)product;
    }
}

對於工廠方法模式有許多擴展,其中之一就是當一個模塊中只需要一個工廠的時候,其實可以對上面進行簡化,直接將create方法定義為靜態方法,相當於一個util類,代碼如下:

public class ConcreteCreator {

    public static <T extends Product> T create(Class<T> c) {

        Product product = null;
        try {

            product = (Product) Class.forName(c.getName()).newInstance();

        } catch (Exception e) {

        }
        return (T)product;
    }
}

這種被稱為簡單工廠模式。

設計模式之—2.工廠方法模式