摘要:場景假設宏基筆記本僅由和內存組成,其中生產和內存的工序可以獨立出來交由各個廠商制造。具體代碼如下品種普通方法實現建造者模式實現內部類實現建造者品種客戶端調用,語義化躍然紙上。普通方法實現母一號土豬黑色建造者模式實現公黑珍珠白色
描述:一個復雜的對象由多個部件組成,每個部件可以獨立生成,部件的組裝過程交由指引者完成。
場景:假設宏基筆記本僅由CPU和內存組成,其中生產CPU和內存的工序可以獨立出來交由各個OEM廠商制造。
實現:
筆記本:
class AcerComputer { String cpu; String memory; AcerComputer(String cpu, String memory) { this.cpu = cpu; this.memory = memory; } }
定義一個建造者:
interface Builder { public String createCPU(); public String createMemory(); }
定義一個OEM,負責生成CPU、內存:
class OEM implements Builder { @Override public String createCPU() { return "CPU"; } @Override public String createMemory() { return "內存"; } }
定義宏基公司,下定單讓OEM制造CPU和內存,它自己組裝成電腦:
class AcerCompany { private Builder builder; private String name; AcerCompany(Builder builder) { this.builder = builder; this.name = "宏基公司"; } public AcerComputer create() { String cpu = builder.createCPU(); String memory = builder.createMemory(); return new AcerComputer(cpu, memory); } }
客戶端調用:
public static void main(String[] args) { Builder builder = new OEM(); AcerCompany acerCompany = new AcerCompany(builder); // 宏基電腦出廠了 AcerComputer computer = acerCompany.create(); }
==============邪惡的分割線==========================================
利用建造者模式寫構造方法:
如果一個對象的構造參數非常多,可以考慮使用建造者模式構造參數,從而使得構造的過程更加語義化。
舉個“蘿卜”,我們要構造一頭豬,它的屬性有雌雄、年齡、品種、膚色等。具體代碼如下:
class Pig { String sex; int age; String varieties; // 品種 String color; // 普通方法實現 Pig(String sex, int age, String varieties, String color) { this.sex = sex; this.age = age; this.varieties = varieties; this.color = color; } // 建造者模式實現 Pig(Builder builder) { this.sex = builder.sex; this.age = builder.age; this.color = builder.color; this.varieties = builder.varieties; } // 內部類實現建造者 static class Builder { String sex; int age; String varieties; // 品種 String color; public Builder sex(String sex) { this.sex = sex; return this; } public Builder age(int age) { this.age = age; return this; } public Builder varieties(String varieties) { this.varieties = varieties; return this; } public Builder color(String color) { this.color = color; return this; } public Pig build() { return new Pig(this); } } }
客戶端調用,語義化躍然紙上。
public static void main(String[] args) { // 普通方法實現 Pig pig1 = new Pig("母", 10, "一號土豬", "黑色"); // 建造者模式實現 Pig pig2 = new Pig.Builder().sex("公").age(5).varieties("黑珍珠").color("白色").build(); }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64028.html
摘要:注意事項聲明函數時候處理業務邏輯區分和單例的區別,配合單例實現初始化構造函數大寫字母開頭推薦注意的成本。簡單工廠模式使用一個類通常為單體來生成實例。 @(書籍閱讀)[JavaScript, 設計模式] 常見設計模式 一直對設計模式不太懂,花了一下午加一晚上的時間,好好的看了看各種設計模式,并總結了一下。 設計模式簡介 設計模式概念解讀 設計模式的發展與在JavaScript中的應用 ...
摘要:建造者模式建造者模式將一個復雜對象的構建層與其表示層相互分離,同樣的構建過程可采用不同的表示。工廠模式主要是為了創建對象實例或者類簇抽象工廠,關心的是最終產出創建的是什么,而不關心創建的過程。 建造者模式 建造者模式將一個復雜對象的構建層與其表示層相互分離,同樣的構建過程可采用不同的表示。工廠模式主要是為了創建對象實例或者類簇(抽象工廠),關心的是最終產出(創建)的是什么,而不關心創建...
摘要:建造者模式實現建造者模式實現創建抽象建造者類創建具體建造者類。建造者模式使用場景建造者模式使用場景相同的方法,不同的執行順序,產生不同的事件結果時,可以采用建造者模式。1、什么是建造者模式 Separate the construction of a complex object from its representation so that the same constructi...
1、什么是建造者模式Separate the construction of a complex object from its representation so that the same construction process can create different representations.將一個復雜對象的構建與它的表示分離, 使得同樣的構建過程可以創建不同的表示。 說人話:將構...
閱讀 3491·2023-04-25 20:41
閱讀 2660·2023-04-25 16:40
閱讀 1433·2021-09-23 11:44
閱讀 1252·2021-09-10 10:51
閱讀 1681·2021-09-07 09:59
閱讀 1642·2019-12-27 12:08
閱讀 552·2019-08-30 15:44
閱讀 3334·2019-08-30 11:08