工廠模式

簡單工廠並非設計模式,能夠說是一種編程習慣.工廠方法模式,抽象工廠模式都屬於對象建立型模式.java

1.簡單工廠

public abstract class Product {
    abstract void prepare();

    abstract void pack();
}
public class ProductA extends Product{
    public void prepare() {
    }

    public void pack() {
    }
}
public class ProductB extends Product{
    public void prepare() {

    }

    public void pack() {

    }
}
public class SimpleProductFactory {

    public Product createProduct(String type){
        if("productA".equals(type)){
            return new ProductA();
        }else if("productB".equals(type)){
            return new ProductB();
        }
        return null;
    }
}
public class Client {
    public static void main(String[] args) {
        SimpleProductFactory factory = new SimpleProductFactory();
        Product product = factory.createProduct("productA");
        product.prepare();
        product.pack();
    }
}

2.工廠方法模式

經過讓子類決定該建立的對象是什麼,來達到將對象建立的過程封裝的目地.工廠方法模式定義了一個建立對象的接口,但由子類決定要實例化的類是哪個.工廠方法讓類把實例化推遲到子類.但每新增一個新產品時就須要增長兩個類.編程

public abstract class Product {
    abstract void prepare();

    abstract void pack();
}
public abstract class Creator {
    public Product orderProduct(){
        Product product = factoryMethod();
        product.prepare();
        product.pack();
        return product;
    }

    protected abstract Product factoryMethod();
}
public class ConcreteProduct extends Product{
    void prepare() {
    }

    void pack() {
    }
}
public class ConcreteCreator extends Creator{

    protected Product factoryMethod() {
        return new ConcreteProduct();
    }
}
public class Test {
    public static void main(String[] args) {
        Creator creator = new ConcreteCreator();
        Product product = creator.orderProduct();
    }
}

3.抽象工廠模式

抽象工廠模式提供一個接口,用於建立相關或依賴對象的家族,而不須要明確指定具體類.容許客戶端使用抽象的接口來建立一組相關的產品,而不須要關係實際產出的具體產品是什麼。這樣一來,客戶就能夠從具體的產品中被解耦。它的優勢是隔離了具體類的生成,使得客戶端不須要知道什麼被建立了,而缺點就在於新增新的行爲會比較麻煩,由於當添加一個新的產品對象時,須要更加須要更改接口及其下全部子類。設計模式

相關文章
相關標籤/搜索