設計模式四--建造者模式

来源:http://www.cnblogs.com/Renyi-Fan/archive/2017/05/23/6896214.html
-Advertisement-
Play Games

設計模式四--建造者模式 一、定義 將一個複雜對象呢的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 二、優點 封裝性 建造者獨立,容易擴展 三、原理圖 Product代表具體的產品 ConcreteBuilder是這些產品建造過程的一個介面 Builder是這些產品的具體建造實例,實現 ...


設計模式四--建造者模式

一、定義

將一個複雜對象呢的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。

 

二、優點

封裝性

建造者獨立,容易擴展

 

三、原理圖

 

Product代表具體的產品

ConcreteBuilder是這些產品建造過程的一個介面

Builder是這些產品的具體建造實例,實現ConcreteBuilder介面

Director包含不同的Builder,負責構造各個產品

 

四、實例

1、Computer

抽象的電腦類

public abstract class Computer {
    private String type;//型號
    private String cpu;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }
    
}

 

2、T410

繼承了Computer類

代表T410電腦

 1 package definition;
 2 
 3 public class T410 extends Computer {
 4     private String graphicCard;//顯卡
 5     public T410(){
 6         this.setType("ThinkPad T410");
 7     }
 8     public String getGraphicCard() {
 9         return graphicCard;
10     }
11     public void setGraphicCard(String graphicCard) {
12         this.graphicCard = graphicCard;
13     }
14     
15     
16     //輸出型號,記憶體和顯卡
17     public String toString() {
18         return "T410 [getType()=" + getType() + ", getCpu()=" + getCpu() + ", graphicCard=" + graphicCard + "]";
19     }
20     
21 }

 

3、X201

繼承了Computer類

代表X201電腦

 1 public class X201 extends Computer {
 2 
 3     public X201() {
 4         this.setType("ThinkPad X201");
 5     }
 6 
 7     //顯示型號和cpu
 8     public String toString() {
 9         return "X201 [getType()=" + getType() + ", getCpu()=" + getCpu() + "]";
10     }
11 
12 }

 

4、ComputerBuilder

介面類,用於建造電腦

1 public interface ComputerBuilder {
2     void buildCpu();//建造cpu
3     void buildGraphicCard();//建造顯卡
4     
5     Computer getResult();//得到建造好的電腦
6 }

 

5、T410Builder

實現ComputerBuilder介面

T410的具體實現

 1 public class T410Builder implements ComputerBuilder {
 2     private T410 computer =new T410();
 3 
 4     public void buildCpu() {
 5         computer.setCpu("i5-450");
 6     }
 7     
 8     public void buildGraphicCard(){
 9         computer.setGraphicCard("Nvidia NVS 3100M");
10     }
11 
12     public Computer getResult() {
13         
14         return computer;
15     }
16 
17 }

 

6、X201Builder

實現ComputerBuilder介面

X201的具體實現

public class X201Builder implements ComputerBuilder {

    private X201 computer = new X201();
    public void buildCpu() {
        computer.setCpu("i3-350");
    }

    public Computer getResult() {
        return computer;
    }

    public void buildGraphicCard() {
        // TODO Auto-generated method stub
        
    }

}

 

7、ComputerDirector

Director包含不同的Builder,負責構造各個產品

 1 public class ComputerDirector {
 2     ComputerBuilder builder;
 3 
 4     //建造T410號機器
 5     public T410 constructT410() {
 6         builder=new T410Builder();
 7         builder.buildCpu();
 8         builder.buildGraphicCard();
 9         return (T410)builder.getResult();
10     }
11 
12     //建造X201號機器
13     public X201 constructX201() {
14         builder=new X201Builder();
15         builder.buildCpu();
16         return (X201)builder.getResult();
17     }
18 
19 }

 

8、ComputerTest

具體的測試類

 

 1 public class ComputerTest {
 2 
 3     public static void main(String[] args) {
 4         ComputerDirector computerDirector=new ComputerDirector();
 5         Computer t410=computerDirector.constructT410();
 6         System.out.println(t410);
 7         
 8         System.out.println("----------------------------");
 9         
10         Computer x201=computerDirector.constructX201();
11         System.out.println(x201);
12     }
13 
14 }

 

五、實驗結果

T410 [getType()=ThinkPad T410, getCpu()=i5-450, graphicCard=Nvidia NVS 3100M]

----------------------------

X201 [getType()=ThinkPad X201, getCpu()=i3-350]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ★★ 輸入文件:dec.in 輸出文件:dec.out 簡單對比 時間限制:1 s 記憶體限制:128 MB Description 出題是一件痛苦的事情! 題目看多了也有審美疲勞,於是我捨棄了大家所熟悉的A+B Problem,改用A-B了哈哈! 好吧,題目是這樣的:給出一串數以及一個數字C,要求計 ...
  • ★☆ 輸入文件:cjzd.in 輸出文件:cjzd.out 簡單對比 時間限制:1 s 記憶體限制:128 MB 問題描述 今年是國際數學聯盟確定的“2000——世界數學年”,又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的一個好朋友 ...
  • 問題描述 將整數n分成k份,且每份不能為空,任意兩種方案不能相同(不考慮順序)。 例如:n=7,k=3,下麵三種分法被認為是相同的。 1,1,5; 1,5,1; 5,1,1; 問有多少種不同的分法。 輸入:n,k (7≤n≤200,2≤k≤6) 輸出:一個整數,即不同的分法。 樣例 輸入: 7 3 ...
  • php-人員許可權管理(RBAC) 許可權管理可以想做vip的功能,普通用戶和vip用戶的功能是不一樣的,大致會用到五張表:用戶表、角色表、功能表,還有他們之間互相關聯的表:用戶與角色表、角色與功能表 我用到的五張表如下: 一.首先寫的是管理員頁面 1.用下拉列表顯示用戶名 2.因為上面已經造了新對象, ...
  • 1 ...
  • ★★ 輸入文件:roads.in 輸出文件:roads.out 簡單對比 時間限制:1 s 記憶體限制:128 MB 譯 by CmYkRgB123 描述 Farmer John 剛剛得到了幾個新農場!他想把這幾個農場用路連接起來,這樣他就可以通過筆直的公路從一個農場到另一個農場了。現在已經有了幾條連 ...
  • 目標:用Python抓取實習僧網站上數據分析相關崗位信息,並用Python做可視化分析 軟體:Python 3.0 版本 一、 實習僧網站爬蟲介紹 實習僧網址:http://www.shixiseng.com/ 在搜索框輸入 數據 然後跳轉到一下頁面,Fn + f12 就能看到網頁調試工具。 刷新頁 ...
  • 轉載請出自出處:http://www.cnblogs.com/hd3013779515/ 1.安裝JAVA、Git、Maven 安裝過程省略,請自行百度。 2.編譯dubbo (1)從https://github.com/alibaba/dubbo/releases下載dubbo-dubbo-2.5 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...