一天一個設計模式:建造模式
概念:
建造模式是物件的建立模式,建造模式可以將一個產品的內部表象(個人理解,可以稱為元件)與產品的生產分割開來,從而可以使一個建造過程生產出來具有不同內部表象的產品物件。
概念:
產品的內部表象:
產品不同組成成分構成(元件)這些零件可以是物件,也可以是非物件,稱為內部表象(internal representation),不同的產品可以有不同的內部表象,也就是不同的零件,使用建造模式可以使客戶端不需要知道生產的產品有哪些零件,每個產品的對應零件批次有什麼不同,是怎麼建造出來的,怎麼組裝產品。
內部表象的建造:
構建物件的過程外化到另一個建造者物件內完成,而建造者物件返回給客戶端的是一個建設完畢的產品物件(將零件的構建跟產品的交付分開)。
uml結構圖:
四個角色:
抽象構建者(Builder)角色:給出抽象介面,規範產品物件的元件的生產方式,該介面通常獨立於應用程式的商業邏輯。抽象的方法往往與物件的元件有關。
具體建造者(ConCreateBuilder)角色:實現抽象介面,完成元件的構建,並提供一個方法用於組裝最終的產品。
導演者(director)角色:呼叫具體的建造者角色以建立產品物件,僅僅起到指揮的作用。
產品(product)角色:產品是最終的產品角色,包含各種不同的元件。
導演者角色是與客戶端打交道的角色。導演者將客戶端建立產品的請求劃分為對各個零件的建造請求,再將這些請求委派給具體建造者角色。具體建造者角色是做具體建造工作的,但是卻不為客戶端所知。
一般來說,每有一個產品類,就有一個相應的具體建造者類。這些產品應當有一樣數目的零件,而每有一個零件就相應地在所有的建造者角色裡有一個建造方法。
產品類product
public class Product { /** * 定義一些關於產品的操作 */ private String part1; private String part2; public String getPart1() { return part1; } public void setPart1(String part1) {this.part1 = part1; } public String getPart2() { return part2; } public void setPart2(String part2) { this.part2 = part2; } }
抽象建造者類Builder
public interface Builder { public void buildPart1(); public void buildPart2(); public Product retrieveResult(); }
具體建造者類ConcreteBuilder
public class ConcreteBuilder implements Builder { private Product product = new Product(); /** * 產品零件建造方法1 */ @Override public void buildPart1() { //構建產品的第一個零件 product.setPart1("編號:9527"); } /** * 產品零件建造方法2 */ @Override public void buildPart2() { //構建產品的第二個零件 product.setPart2("名稱:XXX"); } /** * 產品返還方法 */ @Override public Product retrieveResult() { return product; } }
導演者類Director
public class Director { /** * 持有當前需要使用的建造器物件 */ private Builder builder; /** * 構造方法,傳入建造器物件 * @param builder 建造器物件 */ public Director(Builder builder){ this.builder = builder; } /** * 產品構造方法,負責呼叫各個零件建造方法 */ public void construct(){ builder.buildPart1(); builder.buildPart2(); } }
客戶端類Client
public class Client { public static void main(String[]args){ Builder builder = new ConcreteBuilder(); Director director = new Director(builder); director.construct(); Product product = builder.retrieveResult(); System.out.println(product.getPart1()); System.out.println(product.getPart2()); } }
相關推薦
一天一個設計模式:建造模式
概念: 建造模式是物件的建立模式,建造模式可以將一個產品的內部表象(個人理解,可以稱為元件)與產品的生產分割開來,從而可以使一個建造過程生產出來具有不同內部表象的產品物件。 概念: 產品的內部表象: 產品不同組成成分構成(元件)這些零件可以是物件,也可以是非物件,稱為內部表象(internal re
一天一個設計模式:介面卡模式
概念: 介面卡模式是把一個類的介面變成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。 用途: 就像插頭轉換器,之前入了switch港版,插頭是英式的,還好附贈一個插頭轉換器,介面卡就相當於這個轉換器。 種類: 分為類的介面卡與物件的介面卡兩種
一天一個設計模式:工廠方法模式
工廠方法模式: 定義一個生產產品物件的工廠介面,將建立生產產品的工廠的工作交給子類實現。 隨著實際需要的工廠數量增加,簡單工廠模式體積會迅速膨脹,程式碼迅速臃腫嚴重。 補充:工廠方法模式是針對一類產品的工廠 所以為了程式碼的可閱讀下與可維護性,也做到不同的業務有一定的隔離,將工廠的功能抽象出來成
一天一個設計模式:裝飾者模式
概念: 裝飾者模式又稱為包裝(wrapper)模式。裝飾者模式對客戶端透明的方式擴充套件物件的功能,是繼承關係的一個替代方案。 結構: 裝飾者模式以透明的方式給一個物件附加上更多的責任,換而言之,客戶端並不會覺得物件在裝飾前後有什麼不同,裝飾者模式可以在不使用創造更多子類的情況下,將物件的功能拓展。
一天一個設計模式:策略模式
概念: 策略模式屬於物件的行為模式,其用意是針對一組演算法,將每一個演算法封裝到具有共同介面的獨立的類中,從而使得它們可以相互替換。策略模式使得演算法可以在不影響客戶端的情況下變化。 結構: 環境(Context)角色:持有一個Strategy的引用。 抽象策略(Strategy)角色:這是一個抽象角色
一天一個設計模式:抽象方法模式
為什麼引入抽象工廠模式? 或者說抽象工廠模式與工廠方法模式的區別? 工廠方法模式針對的是一類產品的等級結構,而抽象工廠模式針對的是多個產品等級結構(一個產品族)。 引入概念:產品族與產品等級 產品族:指在不同的產品等級結構中,功能相關聯的產品組成的家族。產品等級:同類產品的不同產品區分。 抽象工廠的作用:
一天一個設計模式:單例模式
概念: 作為物件的建立模式,單例模式確保某一個類只有一個例項,而且自行例項化,並向整個系統提供這個例項。 特點: 1.單例類只能有一個例項 2.單例類必須建立自己的唯一例項 3.單例類必須給其他所有物件提供這一例項。 餓漢式單例類 public class EagerSingleton {
一天一個設計模式:模板方法模式
概念: 模板方法模式是類的行為模式,準備一個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法模式的意思。 結構: 模板方法模式中,抽象類負責定義整個的邏輯框架,
一天一個設計模式(五) - 適配器模式(Adapter)
p s func 靈活性 nsh ans target 多線程 isp pattern 前言 適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。 適配器模式的用途 最經典的就是電器的例子,筆記本電腦的插
一天一個設計模式(四) - 原型模式(Prototype)
管理員 ans rip prototype register 性能 除了 func comm 前言 原型模式屬於對象的創建模式。通過給出一個原型對象來指明所有創建的對象的類型,然後用這個原型對象提供的復制辦法創建出更多同類型的對象。 原型模式的結構 原型模式要求對象實現
一天一個設計模式(一) - 總體概述
享元 關註 責任鏈 分布式 分享圖片 模板方法 mage upload 抽象工廠 前言 最近在對設計模式進行了一系列總結,本文將給大家關於設計模式的一個整體的介紹。 正文 1. 定義 設計模式是某類特定問題的代碼設計解決方案,是一套代碼設計的經驗總結。 2. 作用 提高
一天一個設計模式---裝飾者模式
優點:它可以動態為物件新增功能。 場景:我們希望為某個物件而不是整個類新增一些功能。 一、角色及作用 裝飾者和被裝飾者擁有相同的元件介面。被裝飾者是系統的核心元件,完成特定功能。裝飾者則可以在被裝飾者的方法前後,加上特定的前置處理和後置處理,增強被裝飾
Java設計模式(四)之建立型模式:建造者模式
一、定義: 建造者模式將一個複雜物件的構建與表示分離,使得同樣的構建過程可以建立不同的表示。 建造者模式的UML結構圖: 建造者模式主要包含四個角色: Builder:抽象建造者。它宣告為建立一
Java設計模式(一)之建立型模式:工廠模式(簡單工廠模式+工廠方法模式)
在面向物件程式設計中, 最通常的方法是一個new操作符產生一個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說,許多型別物件的建立需要一系列的步驟:你可能需要計算或取得物件的初始位置;選擇生成哪個子物件例項;或在你生成你需要的物件
一天一種設計模式——狀態模式
作用:當人物有複雜的狀態轉換時使用 Context:狀態擁有者 State:狀態的介面類 狀態擁有著持有一個狀態的介面類,在構造方法時定義其狀態 狀態的介面類中持有狀態的擁有者,可在每一個狀態內部切換其狀態擁有者的狀態 //程式碼執行 public class Text { Contex
設計模式:建造者模式(Builder)
建造者模式:是將一個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 建造者模式通常包括下幾個角色: 1. builder(抽象建造者):給出一個抽象結論,以規範產品物
設計模式:建造者模式
定義 建造者模式(Builder Pattern):將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 類圖 建造者模式包含如下角色: Builder:抽象建造者
設計模式:建造者模式及在jdk中的體現,建造者模式和工廠模式區別
# 0、背景 建造模式(Builder模式) 假如有一個需求:蓋房子,蓋房子過程是一致的:打樁、砌牆、封頂。但是房子是各式各樣的,最後蓋出來的房子可能是高樓或別墅。 根據直接的思路,不用設計模式思想,我們也許會: 1. 寫一個 CommonHouse 抽象類,然後裡面規定了打樁、砌牆、封頂三個方
Java設計模式:生成器模式
生成器 java 問題的提出:有些類很容易創建對象,直接調用其構造方法,例如Student student = new Student(“1001”,”zhang”,21); 之所以容易創建,因為其類成員都是基本數據類型或者封裝類,或者字符串。但是如果對象的類成員還是對象,那麽創建這個對象還需要產生該
JAVA設計模式:組合模式
層次結構 lines end fadein java trac 抽象類 ddc 單個 組合(總體與部分關系)模式:將不同可是相關的對象組合成樹形結構以實現“部分-總體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性。 * 模式角色組成: