国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java運(yùn)用設(shè)計(jì)模式中的建造者模式構(gòu)建項(xiàng)目的實(shí)例解析

2019-11-26 14:25:16
字體:
供稿:網(wǎng)友

1.建造者模式概念
定義: 將一個(gè)復(fù)雜的對(duì)象構(gòu)建與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示;
核心 : 構(gòu)建與表示分離,同構(gòu)建不同表示
區(qū)別于 抽象工廠模式 :
(1)與抽象工廠模式 相似,因?yàn)樗部梢詣?chuàng)建復(fù)雜對(duì)象。主要的區(qū)別是建造者模式著重于 一步步構(gòu)造一個(gè)復(fù)雜對(duì)象,關(guān)注的是零件類型和裝配工藝的順序 。而抽象工廠模式著重于多個(gè)系列的產(chǎn)品對(duì)象(簡單的或是復(fù)雜的)。建造者模式在最后的一步返回產(chǎn)品,而對(duì)于抽象工廠來說,產(chǎn)品是立即返回的。
(2)在建造者模式里,有個(gè)指導(dǎo)者,由指導(dǎo)者來管理建造者,用戶是與指導(dǎo)者聯(lián)系的,指導(dǎo)者聯(lián)系建造者最后得到產(chǎn)品。即建造模式可以強(qiáng)制實(shí)行一種分步驟進(jìn)行的建造過程。

2.它的角色
(1)抽象建造者(Builder)角色:該角色 是用于規(guī)范產(chǎn)品的各個(gè)組成部分,并進(jìn)行抽象,一般獨(dú)立于應(yīng)用程序的邏輯。
(2)具體建造者( ConcreteBuilder )角色:
該角色實(shí) 現(xiàn)出抽象建造者中定義的所有方法,并且返回一個(gè)組建好的產(chǎn)品實(shí)例。
(3)產(chǎn)品( Product )角色:
該角色是建造中的復(fù)雜對(duì)象,一個(gè)系統(tǒng)中會(huì)有多于一個(gè)的產(chǎn)品類,這些產(chǎn)品并不一定有公共的接口,完全可以是不相關(guān)聯(lián)的。
(4)指導(dǎo)者(Director)角色:
該角色負(fù)責(zé)安排已有的模塊的順序,然后告訴建造者 Builder開始建造 。 

3.實(shí)例

public interface Builder {  void buildPartA();  void buildPartB();  void buildPartC();   } 
public class BuilderImpl implements Builder {    @Override  public void buildPartA() {   System.out.println("建造部件A");  }   @Override  public void buildPartB() {   System.out.println("建造部件B");  }   @Override  public void buildPartC() {   System.out.println("建造部件C");  }  } 
public class BuilderImpl2 implements Builder {    @Override  public void buildPartA() {   System.out.println("建造部件AA");  }   @Override  public void buildPartB() {   System.out.println("建造部件BB");  }   @Override  public void buildPartC() {   System.out.println("建造部件CC");  }  } 
/**  * 指揮者:指導(dǎo) 如何 建造  * 組合Builder  */ public class Director {  private Builder builder;    public Director(Builder builder) {   this.builder = builder;  }  /**   * 建造方法:定義了建造的流程   * 如果需要其他流程來實(shí)現(xiàn),再new一個(gè)指揮者Director就可   */  public void construct() {   System.out.println("director 指揮 builder進(jìn)行建造");   builder.buildPartA();   builder.buildPartB();   builder.buildPartC();  }   } 


public class Director2 {  private Builder builder;    public Director2(Builder builder) {   this.builder = builder;  }  /**   * 建造方法:定義了建造的流程   * 如果需要其他流程來實(shí)現(xiàn),再new一個(gè)指揮者Director就可   */  public void construct() {   System.out.println("director2 指揮 builder進(jìn)行建造");   builder.buildPartB();   builder.buildPartC();   builder.buildPartA();  }   } 
public class Test {  public static void main(String[] args) {   Builder builder = new BuilderImpl();   Director director = new Director(builder);   /*    * 同樣的構(gòu)建過程,不同的模塊(buildPartA、buildPartB、buildPartC)實(shí)現(xiàn), new一個(gè)builder的實(shí)現(xiàn)    * 不同的構(gòu)建過程,new 一個(gè)director    * 不同的構(gòu)建過程,不同的模塊實(shí)現(xiàn), new director,new builder    */      director.construct();      System.out.println("");      Builder builder2 = new BuilderImpl2();   Director director2 = new Director(builder2);   director2.construct();      System.out.println("");      Builder builder3 = new BuilderImpl2();   Director2 director3 = new Director2(builder3);   director3.construct();  } } 

打印:

director 指揮 builder進(jìn)行建造 建造部件A 建造部件B 建造部件C  director 指揮 builder進(jìn)行建造 建造部件AA 建造部件BB 建造部件CC  director2 指揮 builder進(jìn)行建造 建造部件BB 建造部件CC 建造部件AA 

4.優(yōu)缺點(diǎn)
(1)優(yōu)點(diǎn):
A.可以讓你改變產(chǎn)品的內(nèi)部表示。
B.封裝建筑和代表性的代碼。
C.提供超過施工工藝的步驟的控制。
(2)缺點(diǎn):
A.需要?jiǎng)?chuàng)造各種不同類型的產(chǎn)品單獨(dú)ConcreteBuilder。

5.使用場景:
(1)當(dāng)創(chuàng)建復(fù)雜對(duì)象的算法應(yīng)該獨(dú)立于該對(duì)象的組成部分以及它們的裝配方式時(shí)。
(2)當(dāng)構(gòu)造過程必須允許被構(gòu)造的對(duì)象有不同表示時(shí)( 相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的結(jié)果時(shí))。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌苏市| 杭锦旗| 城口县| 大名县| 临澧县| 兴仁县| 永定县| 聂拉木县| 沐川县| 香河县| 青州市| 高台县| 邵东县| 同仁县| 宁海县| 台中县| 德安县| 永仁县| 璧山县| 大田县| 司法| 无棣县| 新巴尔虎右旗| 沙田区| 宿松县| 宾川县| 姚安县| 巫溪县| 武穴市| 奇台县| 青龙| 出国| 榆林市| 伊吾县| 军事| 中超| 建昌县| 临安市| 四川省| 滨州市| 杨浦区|