<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      抽象工廠模式(Abstract Factory Pattern):

        是圍繞一個超級工廠創建其他工廠。該超級工廠又稱為其他工廠的工廠。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。

        在抽象工廠模式中,接口是負責創建一個相關對象的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供對象。

        抽象工廠模式提供了一種創建一系列相關或相互依賴對象的接口,而無需指定具體實現類。通過使用抽象工廠模式,可以將客戶端與具體產品的創建過程解耦,使得客戶端可以通過工廠接口來創建一族產品。

        意圖:提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。

        主要解決:主要解決接口選擇的問題。

        何時使用:系統的產品有多于一個的產品族,而系統只消費其中某一族的產品。

        如何解決:在一個產品族里面,定義多個產品。

        關鍵代碼:在一個工廠里聚合多個同類產品。

      優點:當一個產品族中的多個對象被設計成一起工作時,它能保證客戶端始終只使用同一個產品族中的對象。

      缺點:產品族擴展非常困難,要增加一個系列的某一產品,既要在抽象的 Creator 里加代碼,又要在具體的里面加代碼。

      注意事項:產品族難擴展,產品等級易擴展。

      抽象工廠模式包含以下幾個核心角色:

      • 抽象工廠(Abstract Factory):聲明了一組用于創建產品對象的方法,每個方法對應一種產品類型。抽象工廠可以是接口或抽象類。
      • 具體工廠(Concrete Factory):實現了抽象工廠接口,負責創建具體產品對象的實例。
      • 抽象產品(Abstract Product):定義了一組產品對象的共同接口或抽象類,描述了產品對象的公共方法。
      • 具體產品(Concrete Product):實現了抽象產品接口,定義了具體產品的特定行為和屬性。

      抽象工廠模式通常涉及一族相關的產品,每個具體工廠類負責創建該族中的具體產品。客戶端通過使用抽象工廠接口來創建產品對象,而不需要直接使用具體產品的實現類。

      ===================================================================以上八股文來自 菜鳥教程,它從哪里來的不清楚 !!!!==============================================================

      舉個小例子:

        某個產品, 需要提供多個數據庫支持(抽象工廠) ,比如 mysql 、 DB2 、Oracle 等等( 即一系列具體產品)  ,項目又被多個子公司使用  (各個子公司 就是 具體工廠),  各個子公司 有的用  mysql   有的用 DB2  或者兩個都用 進行增刪改查(某一具體產品)

      大概就是這么個情況。。。。。

      代碼如下:

      1. 創建 數據庫服務 抽象工廠 

      public abstract class DBServerFactory {
      
           public abstract MysqlServer createMysqlServer();
      
           public abstract DB2Server createDB2Server();
      }

       

      2.創建 mysql  db2   是數據庫 產品 接口

      // mysql
      public interface MysqlServer { public String mysqlJdbc(); public String mysqlSelect(); public String mysqlSave(); }
      //db2
      public interface DB2Server {
          public String  db2Jdbc();
          public String  db2Select();
          public String  db2Save();
      }
      

      3.創建  子公司  使用 實現

      //iphone 公司使用db2
      public class IphoneDB2 implements DB2Server {
          private final String factoryName= "Iphone";
      
          @Override
          public String db2Jdbc() {
              return factoryName + " db2 jdbc://xxxxxxxxxx";
          }
      
          @Override
          public String db2Select() {
              return factoryName + " db2 select User ==== 11";
          }
      
          @Override
          public String db2Save() {
              return factoryName + " db2 insert  User ==== 22";
          }
      }
      
      //iphone 公司使用mysql
      
      public class IphoneMysql implements MysqlServer {
      
          private final String factoryName= "iphone";
      
          @Override
          public String mysqlJdbc() {
              return factoryName + " mysql jdbc://xxxxxxxxxx";
          }
      
          @Override
          public String mysqlSelect() {
              return factoryName + " mysql select User ==== 11";
          }
      
          @Override
          public String mysqlSave() {
              return factoryName + " mysql insert  User ==== 22";
          }
      }
      

        

      // kite 公司使用db2
      public class KiteDB2 implements DB2Server {
      
          private final String factoryName= "kite";
      
          @Override
          public String db2Jdbc() {
              return factoryName + " db2 jdbc://xxxxxxxxxx";
          }
      
          @Override
          public String db2Select() {
                  return factoryName + " db2 select User ==== 11";
          }
      
          @Override
          public String db2Save() {
                  return factoryName + " db2 insert  User ==== 22";
          }
      }
      

       4. 創建 子公司(子工廠)

      // iPhone 子工廠
      public
      class IphoneFactory extends DBServerFactory{ @Override public MysqlServer createMysqlServer() { return new IphoneMysql(); } @Override public DB2Server createDB2Server() { return new IphoneDB2(); } }

       

      // kite(子工廠)
      public class KiteFactory extends DBServerFactory {
          @Override
          public MysqlServer createMysqlServer() {
              return null;
          }
      
          @Override
          public DB2Server createDB2Server() {
              return new KiteDB2();
          }
      }

      5. 使用 main 方法

       public static void main(String[] args) {
           //iphone
              DBServerFactory iphoneFactory = new IphoneFactory();
           //kite DBServerFactory kiteFactory
      = new KiteFactory(); MysqlServer mysqlServer = iphoneFactory.createMysqlServer(); DB2Server iphoneDB2Server = iphoneFactory.createDB2Server();
      DB2Server kiteDB2Server
      = kiteFactory.createDB2Server(); System.out.println(mysqlServer.mysqlJdbc()); System.out.println(mysqlServer.mysqlSelect()); System.out.println(mysqlServer.mysqlSave()); System.out.println(kiteDB2Server.db2Jdbc()); System.out.println(kiteDB2Server.db2Select()); System.out.println(iphoneDB2Server.db2Jdbc()); System.out.println(iphoneDB2Server.db2Select()); System.out.println(iphoneDB2Server.db2Save()); }

      6.結果

       7.項目結構

       

      ==========================================收工=================================================================================

       

      posted on 2024-04-13 19:29  zy平平仄仄  閱讀(75)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久久国产成人一区二区| 国产美女被遭强高潮免费一视频 | 精品亚洲国产成人av在线| 一区二区三区鲁丝不卡| 成人一区二区三区在线午夜| 无遮无挡爽爽免费视频| 日韩一区二区三区精品| 日韩一区在线中文字幕| 婷婷99视频精品全部在线观看| 亚洲V天堂V手机在线| 美女一区二区三区在线观看视频| 国产叼嘿视频一区二区三区| 国产亚洲精品中文字幕| 日本乱码在线看亚洲乱码| 亚洲国产99精品国自产拍| 国产一区二区一卡二卡| 人妻夜夜爽天天爽三区麻豆av| 亚洲AV蜜桃永久无码精品| 欧美成本人视频免费播放| 亚洲黄色片一区二区三区| 色综合久久久久综合体桃花网| 国产精品日日摸夜夜添夜夜添无码| 国产香蕉久久精品综合网| 免费av网站| 风韵丰满熟妇啪啪区老熟熟女| 久久精品国产成人午夜福利| 高清性欧美暴力猛交| 久久综合给合久久狠狠狠88| 里番全彩爆乳女教师| 久久久久国色av免费看| 亚洲中文字幕一区精品自| 亚洲日韩性欧美中文字幕| 北条麻妃一区二区三区av高清| 免费无遮挡无码视频网站| 欧洲精品色在线观看| 中文有无人妻vs无码人妻激烈| 猫咪AV成人永久网站在线观看| 成年女人喷潮免费视频| 不卡一区二区国产在线| 精品亚洲国产成人av在线| 亚洲色大成永久WW网站|