1. 程式人生 > >工廠模式和 抽象工廠模式

工廠模式和 抽象工廠模式

1:工廠模式 :就是建立一個工廠類,對實現了同一介面(Product)的一些類進行例項的建立。

   優點:        1、一個呼叫者如果想建立一個物件,只要知道其名稱就可以了。        2、擴充套件性高,如果想增加一個產品,只要擴充套件一個工廠類就可以。        3、遮蔽產品的具體實現,呼叫者只關心產品的介面。

   應用:資料庫訪問


public interface Product {
    public abstract void fun();
}


public class ProductA implements Product{

    @Override
    public void fun() {
    System.out.println("ProductA 實現!");
    }

}


public class ProductB implements Product {

    @Override
    public void fun() {
        System.out.println("ProductB 實現!");
    }

}

public class Factory {
    private Product product;
    //也可以通過方法實現,一個方法返回一個物件
    public Factory(String str) {
        switch(str)
        {
            case "A":
                product=new ProductA();
                break;
            case "B":
                product=new ProductB();    
                break;
        }
    }
    public void send() {
        product.fun();
    }

    public static void main(String[] args) {
        Factory factory=new Factory("A");
        factory.send();
    }

}

2:抽象工廠模式:超級工廠介面是負責建立一個相關物件的工廠,不需要顯式指定它們的類。每個實現介面的工廠類都能按照工廠模式         建立物件。

  工廠模式,類的建立依賴工廠類,也就是說,如果想要拓展程式,必須對工廠類進行修改,這違背了開閉原則,建立多個工廠類   這樣一旦需要增加新的功能,直接增加新的工廠類就可以了,不需要修改之前的程式碼

public interface Product {
    public abstract void fun();
}

public class ProductA implements Product{

    @Override
    public void fun() {
    System.out.println("ProductA 實現!");
    }

}

public class ProductB implements Product {

    @Override
    public void fun() {
        System.out.println("ProductB 實現!");
    }

}

public interface Factory {
    public abstract Product send();
}

public class FactoryA implements Factory {
    @Override
    public Product send() {
        return new ProductA();
    }
}

public class FactoryB implements Factory {
    @Override
    public Product send() {
        return new ProductB();
    }
    
    public static void main(String[] args) {
        Factory factory=new FactoryA();
        Product product=factory.send();
        product.fun();
    }
}