国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java設計模式編程中簡單工廠與抽象工廠模式的使用實例

2019-11-26 14:26:00
字體:
來源:轉載
供稿:網友

簡單工廠模式
類圖

201642195447625.jpg (966×712)

通過一個工廠類,以一個條件來創建對應的對象

//業務功能 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);   } } 

簡單工廠的缺陷: 簡單工廠創建產品時需要傳遞相應的參數,如果傳遞不正確就取不到對象了。
改進:多方法創建不同產品
類圖

201642195519770.jpg (926×736)

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);   } } 

抽象工廠模式
里面有幾個概念:抽象工廠、實體工廠、抽象產品、實體產品
抽象工廠:定義創建產品的抽象方法
實體工廠:具體的創建哪種產品
抽象產品:一個接口或基類
實體產品:實現具體功能,或派生
類圖

201642195549773.jpg (1396×882)

//抽象產品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();   } } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘孜县| 连江县| 察雅县| 新营市| 万荣县| 醴陵市| 东辽县| 交口县| 邯郸县| 张家港市| 剑阁县| 西和县| 应用必备| 鄂尔多斯市| 常熟市| 烟台市| 阳朔县| 获嘉县| 绥芬河市| 巴林右旗| 玉树县| 蓬莱市| 大竹县| 永嘉县| 绵阳市| 栾城县| 江西省| 宁陕县| 辽中县| 长丰县| 革吉县| 天镇县| 鸡西市| 肥城市| 康定县| 醴陵市| 三江| 广元市| 扎赉特旗| 柞水县| 卓资县|