最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

1.1 定義

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

1.2 主要作用

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

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

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

1.3 解決的問(wèn)題

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

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

例子:造汽車(chē) & 買(mǎi)汽車(chē)。

工廠(chǎng)(建造者模式):負(fù)責(zé)制造汽車(chē)(組裝過(guò)程和細(xì)節(jié)在工廠(chǎng)內(nèi))
汽車(chē)購(gòu)買(mǎi)者(用戶(hù)):你只需要說(shuō)出你需要的型號(hào)(對(duì)象的類(lèi)型和內(nèi)容),然后直接購(gòu)買(mǎi)就可以使用了
(不需要知道汽車(chē)是怎么組裝的(車(chē)輪、車(chē)門(mén)、發(fā)動(dòng)機(jī)、方向盤(pán)等等))

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

二、模式原理

2.1 模式講解

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

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

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

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

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

2.2 實(shí)例講解

2.2.1 實(shí)例概況

背景:小成希望去電腦城買(mǎi)一臺(tái)組裝的臺(tái)式主機(jī)

過(guò)程:

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

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

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

2.2.2 使用步驟

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

public  abstract class Builder {  

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

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

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

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

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

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


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

//裝機(jī)人員1
  public class ConcreteBuilder extend  Builder{
    //創(chuàng)建產(chǎn)品實(shí)例
    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)品類(lèi)(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(“電腦組裝完成,請(qǐng)驗(yàn)收”);
          
 
}

}

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

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

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

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

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

    }
        
}

組件CUP裝好了
組件主板裝好了
組件硬盤(pán)裝好了
電腦組裝完成,請(qǐng)驗(yàn)收

三、優(yōu)缺點(diǎn)

3.1 優(yōu)點(diǎn)

  • 易于解耦

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

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

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

  • 易于拓展

增加新的具體建造者無(wú)需修改原有類(lèi)庫(kù)的代碼,易于拓展,符合“開(kāi)閉原則“。

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

3.2 缺點(diǎn)

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

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

四、應(yīng)用場(chǎng)景

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

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

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

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

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

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

//整個(gè)過(guò)程就是將配置文件解析成Configration對(duì)象,然后創(chuàng)建SqlSessionFactory的過(guò)程
//Configuration是SqlSessionFactory的一個(gè)內(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);
  }

代碼比較簡(jiǎn)單,就不具體分析了。這里還是對(duì)號(hào)入座,列舉下各個(gè)角色。

SqlSessionFactoryBuilder:指揮者角色

BaseBuilder:抽象

BuilderXMLConfigBuilder:具體的Builder

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

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

相關(guān)文章

  • windows環(huán)境下java開(kāi)發(fā)工具maven的安裝教程圖解

    windows環(huán)境下java開(kāi)發(fā)工具maven的安裝教程圖解

    Maven是一個(gè)項(xiàng)目管理和綜合工具。Maven提供了開(kāi)發(fā)人員構(gòu)建一個(gè)完整的生命周期框架。這篇文章主要介紹了windows環(huán)境下java開(kāi)發(fā)工具maven的安裝,非常不錯(cuò)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java編寫(xiě)擲骰子游戲

    Java編寫(xiě)擲骰子游戲

    這篇文章主要介紹了Java編寫(xiě)擲骰子游戲,需要的朋友可以參考下
    2015-11-11
  • Java編程技巧:if-else優(yōu)化實(shí)踐總結(jié)歸納

    Java編程技巧:if-else優(yōu)化實(shí)踐總結(jié)歸納

    這篇文章主要介紹了Java中避免過(guò)多if-else的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2021-06-06
  • mybatis?like模糊查詢(xún)特殊字符報(bào)錯(cuò)轉(zhuǎn)義處理方式

    mybatis?like模糊查詢(xún)特殊字符報(bào)錯(cuò)轉(zhuǎn)義處理方式

    這篇文章主要介紹了mybatis?like模糊查詢(xún)特殊字符報(bào)錯(cuò)轉(zhuǎn)義處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • collection集合體系與并發(fā)修改異常的解決方法

    collection集合體系與并發(fā)修改異常的解決方法

    今天小編就為大家分享一篇關(guān)于collection集合體系與并發(fā)修改異常的解決方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Java數(shù)組聲明、創(chuàng)建、初始化基礎(chǔ)

    Java數(shù)組聲明、創(chuàng)建、初始化基礎(chǔ)

    本文講述了Java數(shù)組的幾個(gè)相關(guān)的方面,講述了對(duì)Java數(shù)組的聲明、創(chuàng)建和初始化,并給出其對(duì)應(yīng)的代碼
    2012-12-12
  • Java實(shí)現(xiàn)簡(jiǎn)單碰撞檢測(cè)

    Java實(shí)現(xiàn)簡(jiǎn)單碰撞檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單碰撞檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 淺析Java SPI 與 dubbo SPI

    淺析Java SPI 與 dubbo SPI

    在Java中SPI是被用來(lái)設(shè)計(jì)給服務(wù)提供商做插件使用的。本文重點(diǎn)給大家介紹Java SPI 與 dubbo SPI的相關(guān)知識(shí)及區(qū)別介紹,感興趣的朋友跟隨小編一起學(xué)習(xí)下吧
    2021-05-05
  • 將Java程序的輸出結(jié)果寫(xiě)入文件方法實(shí)例

    將Java程序的輸出結(jié)果寫(xiě)入文件方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于將Java程序的輸出結(jié)果寫(xiě)入文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 簡(jiǎn)單理解遵循接口隔離原則的Java設(shè)計(jì)模式編程

    簡(jiǎn)單理解遵循接口隔離原則的Java設(shè)計(jì)模式編程

    這篇文章主要介紹了遵循接口隔離原則的Java設(shè)計(jì)模式編程,針對(duì)Java編程中interface接口方面的編寫(xiě)進(jìn)行約束,需要的朋友可以參考下
    2016-02-02

最新評(píng)論

北安市| 玉溪市| 楚雄市| 巢湖市| 澜沧| 陵川县| 南和县| 北海市| 隆昌县| 多伦县| 潮州市| 灌云县| 黔西县| 台东市| 临高县| 桐庐县| 慈利县| 荔浦县| 卢龙县| 郯城县| 洱源县| 泽库县| 海宁市| 慈利县| 临沭县| 集贤县| 稷山县| 靖边县| 兴仁县| 海宁市| 镇安县| 林州市| 秦皇岛市| 永新县| 克什克腾旗| 平阴县| 辽中县| 万源市| 章丘市| 陇南市| 通州市|