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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

java设计模式-Builder创建者模式

發布時間:2025/3/20 asp.net 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java设计模式-Builder创建者模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題分析:

Builder模式是一步一步創建一個復雜對象的創建型模式。該模式是為了將構建復雜對象的過程和他的部件解耦,使得構建過程和部件的表示隔離開來

Builder模式 主要用于“構建一個復雜的對象。把復雜對象的創建過程加以抽象,通過子類繼承和重寫方法,來得到具有復合屬性的對象。

同時為了統一創建過程把對象的創建操作統一封裝到Director的方法中
由于一個復雜對象的單個屬性可能會發生變化(例如:制造汽車時使用的某一部件屬于不同的廠家)但是整個復雜對象的構建過程卻不會發生變化(例如:汽車的構建圖紙已經固定,只需要把部件按照圖紙裝配好)
GOF:將一個復雜對象的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示。即構建過程相同,但是子部件卻不相同。

即:創建者模式只關心構建過程

抽象工廠注重的是不同的工廠生產不同的產品,builder注重的是某個產品由不同的零件組成,產品的生產工程。
Director就是負責產品組裝的,是控制生產過程的而builder是負責產品部件生產的。這樣就實現了“過程”和“部件”的解耦。
抽象工廠通過不同的構建過程生成不同的對象表示,而Builder模式通過相同的構建過程生成不同的表示。

UML圖:



生活中的例子:計算機的組裝過程簡化為構建主機,設置操作系統,設置顯示器3個部分,然后通過Director類和具體的Builder來構建計算機對象

Computer.java

package com.hust.builder; //計算機抽象類,即Product角色 public abstract class Computer {protected String mBoard;protected String mDisplay;protected String mOs;protected Computer(){};//設置CPU核心數public void setBoard(String board) {mBoard=board;}//設置內存public void setDisplay(String display){mDisplay=display;}//設置操作系統public abstract void setOs();public String toString(){return "Computer[mBoard="+mBoard+",mDisplay="+mDisplay+",mOs="+mOs+"]"; } } MacBook.java

package com.hust.builder; //具體的Computer類,Macbook public class MacBook extends Computer {public void setOs() {mOs="Mac OS X 10.10";}} Builder.java

</pre><pre name="code" class="java">package com.hust.builder; //抽象Builder類 public abstract class Builder {//必須有建造部件的方法public abstract void buildBoard(String board) ;public abstract void buildDisplay(String display) ;public abstract void buildOS();//必須有獲得結果對象的方法public abstract Computer create() ; } MacBookBuilder.java

package com.hust.builder; //具體Builder類,MacbookBuilder public class MacBookBuilder extends Builder {private Computer mComputer=new MacBook();//被構造對象作為具體Builder的成員變量//以下三種方法,是構建對象的部分或者零件public void buildBoard(String board) {mComputer.setBoard(board);}public void buildDisplay(String display) {mComputer.setDisplay(display);}public void buildOS() {mComputer.setOs();}public Computer create() { return mComputer;}} Director.java

package com.hust.builder; //Director類,負責構造Computer public class Director {Builder mBuilder=null;//把構建器作為成員變量public Director(Builder mBuilder){this.mBuilder=mBuilder;}//封裝構建過程public void construct(String board,String display) {mBuilder.buildBoard(board);mBuilder.buildDisplay(display);mBuilder.buildOS();} } 輸出:Computer[mBoard=英特爾主板,mDisplay=AOC顯示器,mOs=Mac OS X 10.10]
注意:

1,builder抽象類必須要有建造部件的方法獲得結果對象的方法

2,builder具體類必須是對象結果作為成員變量

3,Director的類必須有一個construct方法封裝構造過程


在實際開發中,Director角色經常被省略,直接使用一個Builder來進行對象的主機組裝,這個Builder通常為鏈是調用,它的關鍵點是setter方法都會返回自身,就是return this

MacBookBuilder.java

package com.hust.builder2; //具體Builder類,MacbookBuilder public class MacBookBuilder {private Computer mComputer=new MacBook();//被構造對象作為具體Builder的成員變量//以下三種方法,是構建對象的部分或者零件public MacBookBuilder buildBoard(String board) {mComputer.setBoard(board);return this;}public MacBookBuilder buildDisplay(String display) {mComputer.setDisplay(display);return this;}public MacBookBuilder buildOS() {mComputer.setOs();return this;}public Computer create() { return mComputer;}} test.java

package com.hust.builder2;public class TestBuilder2 {/***計算機的組裝過程簡化為構建主機,設置操作系統,設置顯示器3個部分,然后通過Director類和具體的Builder來構建計算機對象*/public static void main(String[] args) {//構建器,是為了構建對象的零件MacBookBuilder mBuilder=new MacBookBuilder();//在實際開發中,Director角色經常被省略,直接使用一個Builder來進行對象的主機組裝,這個Builder通常為鏈是調用,它的關鍵點事setter方法都會返回自身,他、也就是return this ;System.out.println(mBuilder.buildBoard("因特爾主板").buildDisplay("AOC顯示器").buildOS().create().toString());//System.out.println(mBuilder.create().toString());}}
參考:http://blog.csdn.net/jiafu1115/article/details/6668563

總結

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

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