亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java設(shè)計模式之構(gòu)建者模式知識總結(jié)

 更新時間:2021年05月12日 14:29:08   作者:猿起于此  
這幾天剛好在復(fù)習(xí)Java的設(shè)計模式,今天就給小伙伴們?nèi)婵偨Y(jié)一下開發(fā)中最常用的設(shè)計模式-建造者模式的相關(guān)知識,里面有很詳細的代碼示例及注釋哦,需要的朋友可以參考下

一、構(gòu)建者模式

1.1 定義

將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示

1.2 主要作用

在用戶不知道對象的建造過程和細節(jié)的情況下就可以直接創(chuàng)建復(fù)雜的對象。

用戶只需要給出指定復(fù)雜對象的類型和內(nèi)容;

建造者模式負責(zé)按順序創(chuàng)建復(fù)雜對象(把內(nèi)部的建造過程和細節(jié)隱藏起來)

1.3 解決的問題

方便用戶創(chuàng)建復(fù)雜的對象(不需要知道實現(xiàn)過程)

代碼復(fù)用性 & 封裝性(將對象構(gòu)建過程和細節(jié)進行封裝 & 復(fù)用)

例子:造汽車 & 買汽車。

工廠(建造者模式):負責(zé)制造汽車(組裝過程和細節(jié)在工廠內(nèi))
汽車購買者(用戶):你只需要說出你需要的型號(對象的類型和內(nèi)容),然后直接購買就可以使用了
(不需要知道汽車是怎么組裝的(車輪、車門、發(fā)動機、方向盤等等))

示例:pandas 是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。

二、模式原理

2.1 模式講解

1.指揮者(Director)直接和客戶(Client)進行需求溝通;

2.溝通后指揮者將客戶創(chuàng)建產(chǎn)品的需求劃分為各個部件的建造請求(Builder);

3.將各個部件的建造請求委派到具體的建造者(ConcreteBuilder);

4.各個具體建造者負責(zé)進行產(chǎn)品部件的構(gòu)建;

5.最終構(gòu)建成具體產(chǎn)品(Product)。

2.2 實例講解

2.2.1 實例概況

背景:小成希望去電腦城買一臺組裝的臺式主機

過程:

1. 電腦城老板(Diretor)和小成(Client)進行需求溝通(買來打游戲?學(xué)習(xí)?看片?)

2. 了解需求后,電腦城老板將小成需要的主機劃分為各個部件(Builder)的建造請求(CPU、主板blabla)

指揮裝機人員(ConcreteBuilder)去構(gòu)建組件;
將組件組裝起來成小成需要的電腦(Product)

2.2.2 使用步驟

步驟1: 定義組裝的過程(Builder):組裝電腦的過程

public  abstract class Builder {  

//第一步:裝CPU
//聲明為抽象方法,具體由子類實現(xiàn) 
    public abstract void  BuildCPU();

//第二步:裝主板
//聲明為抽象方法,具體由子類實現(xiàn) 
    public abstract void BuildMainboard();

//第三步:裝硬盤
//聲明為抽象方法,具體由子類實現(xiàn) 
    public abstract void BuildHD();

//返回產(chǎn)品的方法:獲得組裝好的電腦
    public abstract Computer GetComputer();
}

步驟2: 電腦城老板委派任務(wù)給裝機人員(Director)

public class Director{
                        //指揮裝機人員組裝電腦
                        public void Construct(Builder builder){
                                
                                 builder. BuildCPU();
                                 builder.BuildMainboard();
                                 builder. BuildHD();
                              }
 }


步驟3:創(chuàng)建具體的建造者(ConcreteBuilder):裝機人員

//裝機人員1
  public class ConcreteBuilder extend  Builder{
    //創(chuàng)建產(chǎn)品實例
    Computer computer = new Computer();

    //組裝產(chǎn)品
    @Override
    public void  BuildCPU(){  
       computer.Add("組裝CPU")
    }  

    @Override
    public void  BuildMainboard(){  
       computer.Add("組裝主板")
    }  

    @Override
    public void  BuildHD(){  
       computer.Add("組裝主板")
    }  

    //返回組裝成功的電腦
     @Override
      public  Computer GetComputer(){  
      return computer
    }  
}

步驟4:定義具體產(chǎn)品類(Product):電腦

public class Computer{
    
    //電腦組件的集合
    private List<String> parts = new ArrayList<String>();
     
    //用于將組件組裝到電腦里
    public void Add(String part){
    parts.add(part);
}
    
    public void Show(){
          for (int i = 0;i<parts.size();i++){    
          System.out.println(“組件”+parts.get(i)+“裝好了”);
          }
          System.out.println(“電腦組裝完成,請驗收”);
          
 
}

}

步驟5:客戶端調(diào)用-小成到電腦城找老板買電腦

public class Builder Pattern{
  public static void main(String[] args){

//逛了很久終于發(fā)現(xiàn)一家合適的電腦店
//找到該店的老板和裝機人員
  Director director = new Director();
  Builder builder = new ConcreteBuilder();

//溝通需求后,老板叫裝機人員去裝電腦
director.Construct(builder);

//裝完后,組裝人員搬來組裝好的電腦
Computer computer = builder.GetComputer();
//組裝人員展示電腦給小成看
computer.Show();

    }
        
}

組件CUP裝好了
組件主板裝好了
組件硬盤裝好了
電腦組裝完成,請驗收

三、優(yōu)缺點

3.1 優(yōu)點

  • 易于解耦

將產(chǎn)品本身與產(chǎn)品創(chuàng)建過程進行解耦,可以使用相同的創(chuàng)建過程來得到不同的產(chǎn)品。也就說細節(jié)依賴抽象。

  • 易于精確控制對象的創(chuàng)建

將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同的方法中,使得創(chuàng)建過程更加清晰

  • 易于拓展

增加新的具體建造者無需修改原有類庫的代碼,易于拓展,符合“開閉原則“。

每一個具體建造者都相對獨立,而與其他的具體建造者無關(guān),因此可以很方便地替換具體建造者或增加新的具體建造者,用戶使用不同的具體建造者即可得到不同的產(chǎn)品對象。

3.2 缺點

-建造者模式所創(chuàng)建的產(chǎn)品一般具有較多的共同點,其組成部分相似;如果產(chǎn)品之間的差異性很大,則不適合使用建造者模式,因此其使用范圍受到一定的限制。

如果產(chǎn)品的內(nèi)部變化復(fù)雜,可能會導(dǎo)致需要定義很多具體建造者類來實現(xiàn)這種變化,導(dǎo)致系統(tǒng)變得很龐大。

四、應(yīng)用場景

需要生成的產(chǎn)品對象有復(fù)雜的內(nèi)部結(jié)構(gòu),這些產(chǎn)品對象具備共性;

隔離復(fù)雜對象的創(chuàng)建和使用,并使得相同的創(chuàng)建過程可以創(chuàng)建不同的產(chǎn)品。

五、在MyBatis中的應(yīng)用

MyBatis中最經(jīng)典的建造者模式肯定是獲取SqlSessionFactory的過程。
下面是獲取SqlSessionFactory的典型用法。

CopyClassPathResource resource = new ClassPathResource("mybatis-config.xml");
InputStream inputStream = resource.getInputStream();
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

通過上面代碼發(fā)現(xiàn),創(chuàng)建SqlSessionFactory的代碼在SqlSessionFactoryBuilder中,進去一探究竟:

//整個過程就是將配置文件解析成Configration對象,然后創(chuàng)建SqlSessionFactory的過程
//Configuration是SqlSessionFactory的一個內(nèi)部屬性
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
    try {
      XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
      return build(parser.parse());
    } catch (Exception e) {
      throw ExceptionFactory.wrapException("Error building SqlSession.", e);
    } finally {
      ErrorContext.instance().reset();
      try {
        inputStream.close();
      } catch (IOException e) {
        // Intentionally ignore. Prefer previous error.
      }
    }
  }
    
  public SqlSessionFactory build(Configuration config) {
    return new DefaultSqlSessionFactory(config);
  }

代碼比較簡單,就不具體分析了。這里還是對號入座,列舉下各個角色。

SqlSessionFactoryBuilder:指揮者角色

BaseBuilder:抽象

BuilderXMLConfigBuilder:具體的Builder

SqlSessionFactory:需要被創(chuàng)建的產(chǎn)品

到此這篇關(guān)于Java設(shè)計模式之構(gòu)建者模式知識總結(jié)的文章就介紹到這了,更多相關(guān)Java構(gòu)建者模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring解決依賴版本不一致報錯問題

    Spring解決依賴版本不一致報錯問題

    許多同學(xué)經(jīng)常會遇到依賴版本不一致導(dǎo)致代碼報錯,所以這篇文章就給大家詳細介紹一下Spring解決依賴版本不一致報錯問題,需要的朋友跟著小編一起來看看吧
    2023-07-07
  • java計算兩點間的距離方法總結(jié)

    java計算兩點間的距離方法總結(jié)

    小編給大家總結(jié)了在java中計算兩點之家距離的方法以及相關(guān)實例代碼分享,有需要的讀者參考下。
    2018-02-02
  • Java操作Jenkins操作憑證(Credential)信息方式

    Java操作Jenkins操作憑證(Credential)信息方式

    這篇文章主要介紹了Java操作Jenkins操作憑證(Credential)信息方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 基于SpringBoot生成二維碼的幾種實現(xiàn)方式

    基于SpringBoot生成二維碼的幾種實現(xiàn)方式

    本文將基于Spring Boot介紹兩種生成二維碼的實現(xiàn)方式,一種是基于Google開發(fā)工具包,另一種是基于Hutool來實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2022-03-03
  • Spring Security中用JWT退出登錄時遇到的坑

    Spring Security中用JWT退出登錄時遇到的坑

    使用了JWT后,每次請求都要攜帶 Bearer Token 并且被專門的過濾器攔截解析之后才能將用戶認(rèn)證信息保存到 SecurityContext 中去,接下來通過本文給大家介紹Spring Security中用JWT退出登錄時遇到的坑,感興趣的朋友一起看看吧
    2021-10-10
  • Spring中@EnableScheduling實現(xiàn)定時任務(wù)代碼實例

    Spring中@EnableScheduling實現(xiàn)定時任務(wù)代碼實例

    這篇文章主要介紹了Spring中@EnableScheduling實現(xiàn)定時任務(wù)代碼實例,@EnableScheduling 注解開啟定時任務(wù)功能,可以將多個方法寫在一個類,也可以分多個類寫,當(dāng)然也可以將方法直接寫在上面ScheddulConfig類中,需要的朋友可以參考下
    2024-01-01
  • Java基礎(chǔ)--反射機制

    Java基礎(chǔ)--反射機制

    本文主要介紹了Java反射機制的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • 基于Java 談回調(diào)函數(shù)

    基于Java 談回調(diào)函數(shù)

    回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當(dāng)這個指針被用來調(diào)用其所 指向的函數(shù)時,我們就說這是回調(diào)函數(shù)
    2017-05-05
  • Java 數(shù)據(jù)結(jié)構(gòu)算法Collection接口迭代器示例詳解

    Java 數(shù)據(jù)結(jié)構(gòu)算法Collection接口迭代器示例詳解

    這篇文章主要為大家介紹了Java 數(shù)據(jù)結(jié)構(gòu)算法Collection接口迭代器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Spring框架構(gòu)造注入type屬性實例詳解

    Spring框架構(gòu)造注入type屬性實例詳解

    這篇文章主要介紹了Spring框架構(gòu)造注入type屬性實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12

最新評論