日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java设计模式之创建型:建造者模式

發布時間:2024/9/30 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java设计模式之创建型:建造者模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是建造者模式:

????????建造者模式將復雜產品的創建步驟分解在在不同的方法中,使得創建過程更加清晰,從而更精確控制復雜對象的產生過程;通過隔離復雜對象的構建與使用,也就是將產品的創建與產品本身分離開來,使得同樣的構建過程可以創建不同的對象;并且每個具體建造者都相互獨立,因此可以很方便地替換具體建造者或增加新的具體建造者,用戶使用不同的具體建造者即可得到不同的產品對象。

? ? ? ? 但建造者模式的缺陷是要求創建的產品具有較多的共同點、組成部分相似,如果產品之間的差異性很大,則不適合使用建造者模式。同時如果產品的內部變化復雜,可能會導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大。

二、UML結構圖:

  • 抽象建造者 Builder:相當于建筑藍圖,聲明了創建?Product 對象的各個部件指定的抽象接口。
  • 具體建造者?ConcreteBuilder:實現Builder抽象接口,構建和裝配各個部件,定義并明確它所創建的表示,并提供一個檢索產品的接口。
  • 指揮者?Director:構建一個使用 Builder 接口的對象。主要有兩個作用,一是隔離用戶與對象的生產過程,二是負責控制產品對象的生產過程。
  • 產品角色?Product:被構造的復雜對象。ConcreteBuilder 創建該產品的內部表示并定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的接口。

三、代碼實現:

????????KFC里面一般都有好幾種可供客戶選擇的套餐,它可以根據客戶所點的套餐,然后在后面做這些套餐,返回給客戶的事一個完整的、美好的套餐。下面我們將會模擬這個過程,我們約定套餐主要包含漢堡、薯條、可樂、雞腿等等組成部分,使用不同的組成部分就可以構建出不同的套餐。

首先是套餐類:

public class Meal {private String food;private String drink;public String getFood() {return food;}public void setFood(String food) {this.food = food;}public String getDrink() {return drink;}public void setDrink(String drink) {this.drink = drink;} }

套餐構造器:

public abstract class MealBuilder {Meal meal = new Meal();public abstract void buildFood();public abstract void buildDrink();public Meal getMeal(){return meal;} }

套餐A、套餐B。這個兩個套餐都是實現抽象套餐類:

public class MealA extends MealBuilder{public void buildDrink() {meal.setDrink("一杯可樂");}public void buildFood() {meal.setFood("一盒薯條");}} public class MealB extends MealBuilder{public void buildDrink() {meal.setDrink("一杯檸檬果汁");}public void buildFood() {meal.setFood("三個雞翅");}}

? 最后是KFC的服務員,它相當于一個指揮者,它決定了套餐是的實現過程,然后給你一個完美的套餐。

public class KFCWaiter {private MealBuilder mealBuilder;public void setMealBuilder(MealBuilder mealBuilder) {this.mealBuilder = mealBuilder;}public Meal construct(){//準備食物mealBuilder.buildFood();//準備飲料mealBuilder.buildDrink();//準備完畢,返回一個完整的套餐給客戶return mealBuilder.getMeal();} }

測試類:

public class Client {public static void main(String[] args) {//服務員KFCWaiter waiter = new KFCWaiter();//套餐AMealA a = new MealA();//服務員準備套餐Awaiter.setMealBuilder(a);//獲得套餐Meal mealA = waiter.construct();System.out.print("套餐A的組成部分:");System.out.println(mealA.getFood()+"---"+mealA.getDrink());} }

運行結果:

套餐A的組成部分:一盒薯條---一杯可樂

四、抽象工廠模式和建造者模式的區別:

????????兩者都是創建型模式,并且最終都是得到一個產品,但兩者的區別在于:

1、抽象工廠模式實現對產品族的創建,產品族指的是不同分類維度的產品組合,用抽象工廠模式不需要關心具體構建過程,只關心產品由什么工廠生產即可。而建造者模式則更關心的是對象的構建過程,要求按照指定的藍圖建造產品,主要目的是通過組裝零配件而產生一個新產品。

2、在抽象工廠模式中使用“工廠”來描述構建者,而在建造者模式中使用“車間”來描述構建者。

(1)抽象工廠模式就好比是一個一個的工廠,寶馬車工廠生產寶馬SUV和寶馬VAN,奔馳車工廠生產奔馳車SUV和奔馳VAN,它是從一個更高層次去看對象的構建,具體到工廠內部還有很多的車間,如制造引擎的車間、裝配引擎的車間等,但這些都是隱藏在工廠內部的細節,對外不公布。也就是對領導者來說,他只要關心一個工廠到底是生產什么產品的,不用關心具體怎么生產。

(2)建造者模式就不同了,它是由車間組成,不同的車間完成不同的創建和裝配任務,一個完整的汽車生產過程需要引擎制造車間、引擎裝配車間的配合才能完成,它們配合的基礎就是設計藍圖,而這個藍圖是掌握在車間主任(Director類)手中,它給建造車間什么藍圖就能生產什么產品,建造者模式更關心建造過程。雖然從外界看來一個車間還是生產車輛,但是這個車間的轉型是非常快的,只要重新設計一個藍圖,即可產生不同的產品,這有賴于建造者模式的功勞。

3、相對來說,抽象工廠模式比建造者模式的粒度要大,它關注產品整體,而建造者模式關注構建過程,所以建造者模式可以很容易地構建出一個嶄新的產品,只要指揮類 Director 能夠提供具體的工藝流程。也正因為如此,兩者的應用場景截然不同,如果希望屏蔽對象的創建過程,只提供一個封裝良好的對象,則可以選擇抽象工廠方法模式。而建造者模式可以用在構件的裝配方面,如通過裝配不同的組件或者相同組件的不同順序,可以產生出一個新的對象,它可以產生一個非常靈活的架構,方便地擴展和維護系統。


設計模式系列文章:

Java設計模式之創建型:工廠模式詳解(簡單工廠+工廠方法+抽象工廠)

Java設計模式之創建型:建造者模式

Java設計模式之創建型:單例模式

Java設計模式之創建型:原型模式

Java設計模式之結構型:適配器模式

Java設計模式之結構型:裝飾器模式

Java設計模式之結構型:代理模式

Java設計模式之結構型:橋接模式

Java設計模式之結構型:外觀模式

Java設計模式之結構型:組合模式

Java設計模式之結構型:享元模式

Java設計模式之行為型:策略模式

Java設計模式之行為型:模板方法模式

Java設計模式之行為型:責任鏈模式

Java設計模式之行為型:觀察者模式

Java設計模式之行為型:訪問者模式

Java設計模式之行為型:中介者模式

Java設計模式之行為型:命令模式

Java設計模式之行為型:狀態模式

Java設計模式之行為型:備忘錄模式

Java設計模式之行為型:迭代器模式

Java設計模式之行為型:解釋器模式


原文鏈接:

設計模式讀書筆記-----建造者模式_chenssy 的技術博客-CSDN博客

總結

以上是生活随笔為你收集整理的Java设计模式之创建型:建造者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。