成人免费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

建造者模式設計

2020-11-04 08:54:54

狀態模式

2020-11-03 13:05:18

命令模式

2020-10-23 09:40:26

設計模式

2021-06-10 19:09:05

模式代碼建造者

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技術棧公眾號

主站蜘蛛池模板: 亚洲欧美日韩精品久久亚洲区 | 亚洲成人一区二区 | 欧美精品综合 | 99精品国产一区二区青青牛奶 | 一级片在线视频 | 亚洲欧美一区二区三区国产精品 | 日日摸天天添天天添破 | 超碰综合 | 精品国模一区二区三区欧美 | 亚洲成人av在线播放 | 国产视频黄色 | 成年人精品视频 | 中文字幕a√ | 夜夜草视频 | 欧洲av在线| 欧美一级一 | 中文字幕一区在线观看视频 | 自拍 亚洲 欧美 老师 丝袜 | 久久久久久久久久久一区二区 | 精品久久久久久亚洲精品 | 欧美一区二区三区大片 | 国产成人精品一区二区三 | 精品国产一区二区三区性色av | 久久国产区 | 欧美日韩毛片 | 亚洲国产成人精品久久久国产成人一区 | 91成人精品 | 成人精品在线观看 | 99视频免费播放 | 免费在线精品视频 | 午夜爱爱毛片xxxx视频免费看 | 久久艹免费视频 | 国产精品欧美精品日韩精品 | 国产在线观 | 欧美成ee人免费视频 | 日韩av啪啪网站大全免费观看 | 欧美黄色大片在线观看 | 中文字幕精品一区二区三区精品 | 激情五月综合 | 欧美黑人国产人伦爽爽爽 | 欧美色图综合网 |