国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java設計模式之構建者模式知識總結

發(fā)布時(shí)間:2021-07-06 11:13 來(lái)源:腳本之家 閱讀:0 作者:猿起于此 欄目: 開(kāi)發(fā)技術(shù)

目錄

          一、構建者模式

          1.1 定義

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

          1.2 主要作用

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

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

          建造者模式負責按順序創(chuàng )建復雜對象(把內部的建造過(guò)程和細節隱藏起來(lái))

          1.3 解決的問(wèn)題

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

          代碼復用性 & 封裝性(將對象構建過(guò)程和細節進(jìn)行封裝 & 復用)

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

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

          二、模式原理

          2.1 模式講解

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

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

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

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

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

          2.2 實(shí)例講解

          2.2.1 實(shí)例概況

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

          過(guò)程:

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

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

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

          2.2.2 使用步驟

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

          public  abstract class Builder {  
          
          //第一步:裝CPU
          //聲明為抽象方法,具體由子類(lèi)實(shí)現 
              public abstract void  BuildCPU();
          
          //第二步:裝主板
          //聲明為抽象方法,具體由子類(lèi)實(shí)現 
              public abstract void BuildMainboard();
          
          //第三步:裝硬盤(pán)
          //聲明為抽象方法,具體由子類(lèi)實(shí)現 
              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)品實(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(“電腦組裝完成,請驗收”);
                    
           
          }
          
          }
          
          

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

          public class Builder Pattern{
            public static void main(String[] args){
          
          //逛了很久終于發(fā)現一家合適的電腦店
          //找到該店的老板和裝機人員
            Director director = new Director();
            Builder builder = new ConcreteBuilder();
          
          //溝通需求后,老板叫裝機人員去裝電腦
          director.Construct(builder);
          
          //裝完后,組裝人員搬來(lái)組裝好的電腦
          Computer computer = builder.GetComputer();
          //組裝人員展示電腦給小成看
          computer.Show();
          
              }
                  
          }
          

          組件CUP裝好了
          組件主板裝好了
          組件硬盤(pá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ō)細節依賴(lài)抽象。

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

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

          • 易于拓展

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

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

          3.2 缺點(diǎn)

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

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

          四、應用場(chǎng)景

          需要生成的產(chǎn)品對象有復雜的內部結構,這些產(chǎn)品對象具備共性;

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

          五、在MyBatis中的應用

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

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

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

          //整個(gè)過(guò)程就是將配置文件解析成Configration對象,然后創(chuàng  )建SqlSessionFactory的過(guò)程
          //Configuration是SqlSessionFactory的一個(gè)內部屬性
          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)單,就不具體分析了。這里還是對號入座,列舉下各個(gè)角色。

          SqlSessionFactoryBuilder:指揮者角色

          BaseBuilder:抽象

          BuilderXMLConfigBuilder:具體的Builder

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

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

          免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

          久久精品这里热有精品| 无码人妻精品一区二区三区99仓本| 在线看片免费人成视频无毒| 久久久99久久久国产自输拍| 电家庭影院午夜| 久久影院午夜理论片无码|