成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

設計模式系列-建造者模式

開發 前端
建造者模式用于將復雜對象的創建和表示分離,有些對象由很多部分組成,每個部分又可以有多種不同選擇,創建這種對象的時候往往需要考慮使用建造者模式。

  [[431024]]

建造者模式用于將復雜對象的創建和表示分離,有些對象由很多部分組成,每個部分又可以有多種不同選擇,創建這種對象的時候往往需要考慮使用建造者模式。

舉個例子

一輛汽車由發動機,方向盤,車燈,車燈,車身顏色等組成,每輛車的顏色,車輪大小,車燈樣式可能會不一樣,但是車的組成部分不會少。

建造模式有兩種實現方式,第一種方式是有導演的方式,第二種是無導演方式。根據我的經驗日常使用無導演的方式可能會更多一些。

有導演

所謂有導演就是通過一個導演類來指揮對象創建的過程,客戶端使用導演類來獲取對象,不用關心對象具體的創建過程。

先看一下UML圖,對建造模式有個大概的了解。

看一下具體代碼,我們以建造一輛汽車舉例

  1. public class Car { 
  2.  
  3.     private String wheel; 
  4.     private String engine; 
  5.     private String seat; 
  6.     private String lamp; 
  7.     private String color; 
  8.  
  9.    //篇幅原因,此處省略get,set方法 
  10.  
  11.     @Override 
  12.     public String toString() { 
  13.         return "Car{" + 
  14.                 "wheel='" + wheel + '\'' + 
  15.                 ", engine='" + engine + '\'' + 
  16.                 ", seat='" + seat + '\'' + 
  17.                 ", lamp='" + lamp + '\'' + 
  18.                 ", color='" + color + '\'' + 
  19.                 '}'
  20.     } 

抽象Builder類,指定建造復雜對象步驟

  1. public abstract class Builder { 
  2.      
  3.     public abstract void buildWheel(); 
  4.  
  5.     public abstract void buildSeat(); 
  6.  
  7.     public abstract void buildLamp(); 
  8.  
  9.     public abstract void buildColor(); 
  10.  
  11.     public abstract void buildEngine(); 
  12.  
  13.     public abstract Car getCar(); 
  14.  

具體Builder類,實現復雜對象具體建造過程和內容

  1. public class ConcreteBuilder extends Builder { 
  2.  
  3.     private Car car; 
  4.  
  5.     public ConcreteBuilder() { 
  6.         car = new Car(); 
  7.     } 
  8.  
  9.     @Override 
  10.     public void buildWheel() { 
  11.         car.setWheel("wheel"); 
  12.     } 
  13.  
  14.     @Override 
  15.     public void buildSeat() { 
  16.         car.setSeat("seat"); 
  17.     } 
  18.  
  19.     @Override 
  20.     public void buildLamp() { 
  21.         car.setLamp("lamp"); 
  22.     } 
  23.  
  24.     @Override 
  25.     public void buildColor() { 
  26.         car.setColor("color"); 
  27.     } 
  28.  
  29.     @Override 
  30.     public void buildEngine() { 
  31.         car.setEngine("engine"); 
  32.     } 
  33.  
  34.     //返回構建好的汽車模型 
  35.     @Override 
  36.     public Car getCar() { 
  37.         return car; 
  38.     } 

Director類,決定了復雜對象的創建過程。

  1. public class CarDirector { 
  2.     public Car createCar(Builder builder){ 
  3.         builder.buildWheel(); 
  4.         builder.buildSeat(); 
  5.         builder.buildLamp(); 
  6.         builder.buildColor(); 
  7.         builder.buildEngine(); 
  8.         return builder.getCar(); 
  9.     } 

客戶端這樣使用

  1. public class BuilderClient { 
  2.     public static void main(String[] args){ 
  3.         CarDirector carDirector = new CarDirector(); 
  4.         //通過Director創建具體對象,不關心對象的創建過程 
  5.         Car car = carDirector.createCar(new ConcreteBuilder()); 
  6.         System.out.println(car.toString()); 
  7.     } 

無導演

無導演模式感覺日常開發中用的比較多,但凡見到形似這樣的代碼,大概率就是建造者模式了。

  1. Car car = concreteBuilderA.buildEngine("engine"
  2.                     .buildLamp("lamp"
  3.                     .buildSeat("seat"
  4.                     .buildColor("color"
  5.                     //.buildWheel("wheel"
  6.                     .build(); 

老規矩先來看一下UML圖,來個整體的認識。

同樣來看一下具體代碼實現,還是以創建汽車為例,所以Car的代碼不在重復給出。

Builder類

  1. public abstract class BuilderA { 
  2.     //返回builder自身 
  3.     abstract BuilderA buildWheel(String wheel); 
  4.     abstract BuilderA buildEngine(String engine); 
  5.     abstract BuilderA buildLamp(String lamp); 
  6.     abstract BuilderA buildSeat(String seat); 
  7.     abstract BuilderA buildColor(String color); 
  8.     abstract Car build(); 

具體Builder,負責對象的具體創建工作。

  1. public class ConcreteBuilderA extends BuilderA  { 
  2.  
  3.     private Car car; 
  4.  
  5.     public ConcreteBuilderA() { 
  6.         car = new Car(); 
  7.     } 
  8.  
  9.     @Override 
  10.     BuilderA buildWheel(String wheel) { 
  11.         car.setWheel(wheel); 
  12.         return this; 
  13.     } 
  14.  
  15.     @Override 
  16.     BuilderA buildEngine(String engine) { 
  17.         car.setEngine("engine"); 
  18.         return this; 
  19.     } 
  20.  
  21.     @Override 
  22.     BuilderA buildLamp(String lamp) { 
  23.         car.setLamp("lamp"); 
  24.         return this; 
  25.     } 
  26.  
  27.     @Override 
  28.     BuilderA buildSeat(String seat) { 
  29.         car.setSeat("seat"); 
  30.         return this; 
  31.     } 
  32.  
  33.     @Override 
  34.     BuilderA buildColor(String color) { 
  35.         car.setColor("color"); 
  36.         return this; 
  37.     } 
  38.  
  39.     @Override 
  40.     Car build() { 
  41.         return car; 
  42.     } 

客戶端這樣使用

  1. public class BuilderAClient { 
  2.     public static void main(String[] args){ 
  3.         ConcreteBuilderA concreteBuilderA = new ConcreteBuilderA(); 
  4.  
  5.         Car car = concreteBuilderA.buildEngine("engine"
  6.                     .buildLamp("lamp"
  7.                     .buildSeat("seat"
  8.                     .buildColor("color"
  9.                     //.buildWheel("wheel"
  10.                     .build(); 
  11.         System.out.println(car.toString()); 
  12.     } 

總結

建造者模式是創建型模式之一,所謂的沒有Director的模式,只不過是把建造過程留給了客戶端,讓使用者自己決定怎樣創建對象。無Director模式的實現關鍵是Builder類里面構建每個組件的方法都是返回Builder自己。

責任編輯:武曉燕 來源: 花括號MC
相關推薦

2020-10-20 13:33:00

建造者模式

2021-01-21 05:34:14

設計模式建造者

2021-04-14 09:02:22

模式 設計建造者

2020-11-05 09:38:07

中介者模式

2011-07-14 14:46:46

設計模式

2020-10-26 08:45:39

觀察者模式

2024-02-19 08:38:34

建造者模式Android設計模式

2013-11-26 17:09:57

Android設計模式

2021-07-08 11:28:43

觀察者模式設計

2022-01-29 22:12:35

前端模式觀察者

2022-01-12 13:33:25

工廠模式設計

2021-05-11 08:54:59

建造者模式設計

2021-06-10 19:09:05

模式代碼建造者

2020-11-04 08:54:54

狀態模式

2020-11-03 13:05:18

命令模式

2020-10-23 09:40:26

設計模式

2021-09-29 13:53:17

抽象工廠模式

2022-01-14 09:22:22

設計模式橋接

2020-10-19 09:28:00

抽象工廠模式

2020-10-21 14:29:15

原型模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品国产亚洲一区二区三区 | 欧美成人精品一区二区男人看 | 一区亚洲| 91青娱乐在线 | 午夜久草 | 久久国际精品 | 精品国产久 | av网站免费观看 | 天天色综网| 午夜小视频在线播放 | 欧美亚洲一区二区三区 | 男人的天堂视频网站 | 国产一区二区 | 欧美一级片在线观看 | 欧美a v在线 | 日本成人片在线观看 | 色网在线观看 | 看羞羞视频免费 | 欧美性大战久久久久久久蜜臀 | 久久久久国产精品 | 91精品一区二区 | 久久亚洲一区二区三区四区 | 爱爱爱av | 亚洲综合无码一区二区 | 国产99精品 | 一级黄色毛片免费 | 国产精品毛片一区二区在线看 | 自拍偷拍亚洲视频 | 做a网站| 国产精品欧美一区二区三区不卡 | 久久精品色欧美aⅴ一区二区 | 成人在线免费网站 | 亚洲成av | 伊人精品在线视频 | 久久精品一区二区三区四区 | 久久伊人精品一区二区三区 | 欧美专区日韩 | 亚洲电影一区二区三区 | 成人午夜激情 | 亚洲精品一区二区三区在线 | 久久精品国产免费看久久精品 |