工廠模式和 抽象工廠模式
阿新 • • 發佈:2018-12-12
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(); } }