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

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

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

      Java設(shè)計模式-工廠模式

      Java設(shè)計模式-工廠模式

      關(guān)于Java的全部設(shè)計模式和分類,在單例模式中已有。

      工廠模式

      簡介

      定義創(chuàng)建對象的接口(工廠),讓其子類決定實例化哪一個類。

      場景

      這里會舉兩個例子,一個自己舉的例子,一些工廠模式的實際使用場景

      創(chuàng)建汽車的例子

      1.產(chǎn)品接口

      首先定義一個產(chǎn)品的接口,比如以創(chuàng)建汽車的例子,例如有一個Car接口:

      public interface Car {
      	void drive();
      }
      

      2.具體產(chǎn)品類

      public class Sedan implements Car {
      	@Override
      	public void drive(){
      		System.out.println("轎車啟動");	
      	}
      }
      
      public class SUV implements Car {
          @Override
          public void drive(){
              System.out.println("SUV啟動");
          }
      }
      

      3.工廠接口和具體工廠類

      定義一個工廠接口CarFactory用于生產(chǎn)汽車:

      public interface CarFactory{
          Car produceCar();
      }
      

      然后有具體的類決定生產(chǎn)那種車:

      public class SedanFactory implements CarFactory{
          @Override
          public Car produceCar(){
              return new Sedan();
          }
      }
      
      public class SUVFactory implements CarFactory {
          @Override
          public Car produceCar(){
              return new SUV();
          }
      }
      

      4.使用示例

      public class Main{
          public static void main(String[] args){
          	//使用轎車工廠生產(chǎn)轎車并啟動
              SedanFactory s = new SedanFactory();
              Car sedun = s.produceCar();
              sedun.drive();
              
              //同理:請你寫
      	}
      }
      

      在這個例子中,CarFactory就是創(chuàng)建對象的工廠接口,SedanFactorySUVFactory是其子類,它們分別決定實例化SedanSUV類。這樣如果要添加新類型的汽車,只需要創(chuàng)建新的汽車類和對應(yīng)的工廠類,而不需要修改現(xiàn)在的代碼,符合開閉原則。

      然后就是關(guān)于工廠模式的實際應(yīng)用

      數(shù)據(jù)庫連接池

      • 比如 HikariCPC3P0、Druid 等常見的連接池實現(xiàn),它們都會使用工廠模式來創(chuàng)建和配置數(shù)據(jù)庫連接池對象。通常,連接池會暴露一個工廠類,通過工廠方法提供數(shù)據(jù)庫連接對象,而用戶不需要直接創(chuàng)建數(shù)據(jù)庫連接對象,而是從連接池中獲取。這種方式可以有效地管理數(shù)據(jù)庫連接,避免每次請求都重新創(chuàng)建連接。例如,HikariCP(一個高性能的數(shù)據(jù)庫連接池),在初始化時使用了類似工廠模式的設(shè)計:

        java復(fù)制代碼HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
        dataSource.setUsername("user");
        dataSource.setPassword("password");
        

        在這個過程中,HikariDataSource 實際上充當(dāng)了工廠類,用戶通過它來配置和獲取數(shù)據(jù)庫連接。

      序列化與反序列化

      • 在一些框架中(如 JSON 或 XML 解析庫),工廠模式用于根據(jù)配置創(chuàng)建不同類型的對象,或者根據(jù)數(shù)據(jù)格式(JSON、XML)動態(tài)選擇適當(dāng)?shù)慕馕銎鳌?/li>

      日志框架

      • 在一些日志框架(如 Log4j 或 SLF4J)中,工廠模式用于根據(jù)配置生成不同類型的日志記錄器對象。通常通過工廠方法來選擇不同的日志級別、輸出目的地等。

      MyBatis中的應(yīng)用

      • 在 MyBatis 中,工廠模式也有應(yīng)用,主要體現(xiàn)在數(shù)據(jù)庫連接和會話管理的部分。

        SqlSessionFactory:MyBatis 的核心工廠類之一就是 SqlSessionFactory,它用于創(chuàng)建和管理 SqlSession 對象。SqlSessionFactory 是一個典型的工廠模式實現(xiàn)。它通過讀取 MyBatis 配置文件(如 mybatis-config.xml),根據(jù)配置信息來創(chuàng)建 SqlSession 對象。

        例如,以下是 MyBatis 中創(chuàng)建 SqlSessionFactory 的方式:

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        

        SqlSessionFactory 的構(gòu)建通常需要配置數(shù)據(jù)源、映射器等信息,它會根據(jù)這些配置生成 SqlSession 實例,而用戶則通過 SqlSessionFactory 獲取到 SqlSession,并通過它來執(zhí)行數(shù)據(jù)庫操作。這一過程的核心就是通過工廠模式動態(tài)創(chuàng)建和管理 SqlSession 對象。

      優(yōu)點

      就結(jié)合上面的例子,理解為什么要使用它,不使用就不行嗎?

      解耦對象創(chuàng)建和使用,在 MySQL 和 MyBatis 的數(shù)據(jù)庫連接管理中及我舉的例子中都有體現(xiàn)

      符合開閉原則,使得擴展性很好

      缺點

      增加系統(tǒng)復(fù)雜度:引入工廠模式會增加系統(tǒng)的復(fù)雜度,尤其是對于簡單的應(yīng)用程序。如果系統(tǒng)本身不復(fù)雜,使用工廠模式可能會顯得有些過度設(shè)計,增加了額外的抽象層和類的數(shù)量。對于小型項目,簡單的對象創(chuàng)建邏輯不一定需要工廠模式。

      可能導(dǎo)致類過多

      難以適應(yīng)頻繁變化的需求:如果應(yīng)用程序需要頻繁地變化和修改對象的創(chuàng)建方式,工廠模式可能變得不夠靈活。在這種情況下,可能需要更為靈活的設(shè)計模式,如 抽象工廠模式依賴注入。

      posted @ 2024-11-26 21:33  Liberty碼農(nóng)志  閱讀(218)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 不卡在线一区二区三区视频| 隆安县| 狠狠综合久久av一区二| √天堂资源地址在线官网| 久久99九九精品久久久久蜜桃| 中文字幕无线码中文字幕| 亚洲精品一区二区三区大桥未久| 国产在线无码不卡播放| 国产SM重味一区二区三区| 一区二区三区av天堂| 中文字幕99国产精品| 亚洲中文字幕综合小综合| 深夜福利资源在线观看| 欧美激情一区二区三区在线| 久久久久噜噜噜亚洲熟女综合| 国产高清午夜人成在线观看,| 94人妻少妇偷人精品| 色婷婷欧美在线播放内射| gogogo高清免费观看| 人妻av中文字幕无码专区| 国产亚洲国产精品二区| 精品亚洲精品日韩精品| 依依成人精品视频在线观看| 亚洲av成人三区国产精品| 97久久综合亚洲色hezyo| 92精品国产自产在线观看481页| 亚洲综合欧美在线…| 国产精品综合av一区二区国产馆| 免费无码又爽又刺激成人| 德钦县| 国产强奷在线播放免费| 亚洲色婷婷一区二区| 国产午夜视频在线观看| 久久99国产精品尤物| 亚洲精品乱码久久久久久自慰| 欧洲亚洲色一区二区色99| 女的被弄到高潮娇喘喷水视频| 亚洲综合久久一区二区三区| 人妻少妇久久中文字幕| 东京热人妻无码人av| 亚洲AV日韩AV高清在线观看|