簡單工廠模式
類圖

通過一個工廠類,以一個條件來創建對應的對象
//業務功能 public interface ICalculation { double getResult(double numA, double numB); } public class CalcAdd implements ICalculation { @Override public double getResult(double numA, double numB) { System.out.println("加法"); return numA + numB; } } public class CalcSubtract implements ICalculation { @Override public double getResult(double numA, double numB) { System.out.println("減法"); return numA - numB; } } /* * 簡單工廠模式 關注:對象的創建 * 建立一個工廠類,對實現了同一接口的或者是存在繼承關系的一些類進行實例的創建 */ public class Test4Simple { public static void main(String[] args) { // String operation = "/"; String operation = "+"; // String operation = "-"; // String operation = "*"; double numA = 182, numB = 33; ICalculation createCalc = CalcSimpleFactory.createCalc(operation); double result = createCalc.getResult(numA, numB); System.out.println(result); } } 簡單工廠的缺陷: 簡單工廠創建產品時需要傳遞相應的參數,如果傳遞不正確就取不到對象了。
改進:多方法創建不同產品
類圖

public class CalcMultipleFactory { public static ICalculation produceAdd() { return new CalcAdd(); } public static ICalculation produceSubtract() { return new CalcSubtract(); } public static ICalculation produceMultiply() { return new CalcMultiply(); } public static ICalculation produceDivide() { return new CalcDivide(); } } public class Test4Multiple { public static void main(String[] args) { double numA = 182, numB = 33; ICalculation createCalc = CalcMultipleFactory.produceAdd(); double result = createCalc.getResult(numA, numB); System.out.println(result); createCalc = CalcMultipleFactory.produceSubtract(); result = createCalc.getResult(numA, numB); System.out.println(result); createCalc = CalcMultipleFactory.produceMultiply(); result = createCalc.getResult(numA, numB); System.out.println(result); createCalc = CalcMultipleFactory.produceDivide(); result = createCalc.getResult(numA, numB); System.out.println(result); } } 抽象工廠模式
里面有幾個概念:抽象工廠、實體工廠、抽象產品、實體產品
抽象工廠:定義創建產品的抽象方法
實體工廠:具體的創建哪種產品
抽象產品:一個接口或基類
實體產品:實現具體功能,或派生
類圖

//抽象產品1 public interface IProduct1 { public void show(); } //抽象產品2 public interface IProduct2 { public void show(); } //實體產品1 public class Product1 implements IProduct1 { public void show() { System.out.println("創建了1型產品"); } } //實體產品2 public class Product2 implements IProduct2 { public void show() { System.out.println("創建了2型產品"); } } /* * 1A 1B屬于Product1 同一產品等級結構中 * 2A 2B屬于Product2 */ public class GradeProduct1A extends Product1 { @Override public void show() { super.show(); System.out.println("這是產品1下的:產品A"); } } public class GradeProduct1B extends Product1 { @Override public void show() { super.show(); System.out.println("這是產品1下的:產品B"); } } public class GradeProduct2A extends Product2 { @Override public void show() { super.show(); System.out.println("這是產品2下的:產品A"); } } public class GradeProduct2B extends Product2 { @Override public void show() { super.show(); System.out.println("這是產品2下的:產品B"); } } //抽象工廠 創建不同的抽象產品 public interface IFactory { public IProduct1 createProduct1A();//1類產品 型號A public IProduct1 createProduct1B();//1類產品 型號B public IProduct2 createProduct2A();//2類產品 型號A public IProduct2 createProduct2B();//2類產品 型號B } //實體工廠 創建實體產品,返回類型為抽象產品 public class Factory implements IFactory { public IProduct1 createProduct1A() { return new GradeProduct1A(); } public IProduct1 createProduct1B() { return new GradeProduct1B(); } public IProduct2 createProduct2A() { return new GradeProduct2A(); } public IProduct2 createProduct2B() { return new GradeProduct2B(); } } /* * 抽象工廠模式:用來創建一組相關或者相互依賴的對象 * * 流程:抽象工廠,實體工廠 生產產品 * 抽象產品,實體產品 實現產品功能 * 缺點:當需要增加一個產品(由抽象和實體構成),工廠都需要更改 */ public class Test4Abstract { public static void main(String[] args) { IFactory factory = new Factory(); IProduct1 product1a = factory.createProduct1A(); product1a.show(); IProduct1 product1b = factory.createProduct1B(); product1b.show(); IProduct2 product2a = factory.createProduct2A(); product2a.show(); IProduct2 product2b = factory.createProduct2B(); product2b.show(); } }
|
新聞熱點
疑難解答