1. 程式人生 > 其它 >內的 物件 獲取 鍵值對_陣列遍歷和物件遍歷

內的 物件 獲取 鍵值對_陣列遍歷和物件遍歷

技術標籤:設計模式設計模式建造者模式

建造者模式的定義

建造者模式(Builder Pattern)將一個複雜物件的構建過程與它的表示分離,使得同樣的構建過程可以建立不同的表示,屬於建立型設計模式。

對於使用者而言,使用建造者模式只需指定需要建立的型別就可以獲得物件,建立過程及細節不需要了解

  1. 構建與表示分離:構建代表物件建立,表示代表物件行為、方法,也就是將物件的建立與行為進行分離(對應到Java程式碼,其實就是使用介面規定行為,然後由具體的實現類進行構建)。
  2. 建立不同的表示:也就是具備同樣的行為,但是卻由於構建的行為順序不同或其他原因可以創建出不同的表示。

應用場景

  1. 相同的方法,不同的執行順序,產生不同的結果。
  2. 多個部件或零件,都可以裝配到一個物件中,但是產生的結果又不相同
  3. 產品類非常複雜,或者產品類中不同的呼叫順序產生不同的作用。
  4. 初始化一個物件特別複雜,引數多,而且很多引數都具有預設值。

建造者模式主要包含4個角色

  1. 產品(Product):要建立的產品類物件。
  2. 抽象建造者(IBuilder):建造者的抽象類,規範產品物件的各個組成部分的建立,一般由子類實現具體的建立過程。
  3. 建造者(Concrete Builder):具體的Builder類,根據不同的業務邏輯,具體化物件的各個組成部分的建立。
  4. 呼叫者(Director):呼叫具體的建造者,來建立物件的各個部分,在指導者中不涉及具體產品的資訊,只負責保證物件各部分完整建立或者按某種順序建立。在類圖中,Client相當於呼叫者的角色。

示例

  • 產品類 Product
package com.liguogang.BuilderPattern;
/**
* @Description: 產品類
* @Author:      LiGuoGang
* @date:    2021/1/21 21:06
*/
public class Product {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
} @Override public String toString() { return "Product{" + "name='" + name + '\'' + '}'; } }
  • 抽象建造者 IBuilder
package com.liguogang.BuilderPattern;
/**
* @Description: 抽象建造者
* @Author:      LiGuoGang
* @date:    2021/1/21 21:07
*/
public interface IBuilder {
    Product build();
}

  • 具體建造者 ConcreteBuilder
package com.liguogang.BuilderPattern;
/**
* @Description: 具體建造者
* @Author:      LiGuoGang
* @date:    2021/1/21 21:09
*/
public class ConcreteBuilder implements IBuilder {

    private Product product = new Product();

    @Override
    public Product build() {
        return product;
    }
}

  • 呼叫者 Client
package com.liguogang.BuilderPattern;
/**
* @Description: 呼叫者
* @Author:      LiGuoGang
* @date:    2021/1/21 21:11
*/
public class Client {
    public static void main(String[] args) {
        ConcreteBuilder builder = new ConcreteBuilder();
        System.out.println(builder.build());
    }
}

效果:
在這裡插入圖片描述
原始碼地址:https://github.com/lee58/designPattern