设计模式(三)之生成器模式(Builder Pattern)
生成器模式
1、描述
將一個復雜對象的構建與它的表現分離,使同樣的構建過程可以創建不同的表現。
2、使用場景
當系統準備為用戶提供一個內部結構復雜的對象,而且在構造方法中編寫創建該對象的代碼無法滿足用戶需求時,就可以使用生成器模式來構造這樣的對象。
當某些系統要求對象的構造過程必須獨立于創建該對象的類時。
eg:我們要寫一個包含有按鈕、標簽和文本框的組件容器。不同用戶對容器有著不同的要求。比如有些用戶希望容器中只含有按鈕和標簽,有些用戶希望容器中含有的標簽、按鈕和文本框。另外,用戶對組件在容器中的順序位置也有不同的要求,比如某些用戶要求組件在容器中排列是按鈕、標簽、文本框,有的用戶希望排列順序是標簽、文本框、按鈕。顯然我們不能在容器的構造方法中編寫組件的創建代碼,也不能編寫排列這些組件位置的代碼。
3、模式中的角色
產品(Product):具體生成器要構造的復雜對象。
抽象生成器(Builder):抽象生成器是一個接口,該接口除了創建一個Product對象的各個組件定義了若干個方法外,還要定義返回Product對象的方法。
具體生成器(ConcreteBuilder):實現Builder接口的類,具體生成器將實現Builder接口所定義的方法。
指揮者(Director):指揮者是一個類,該類需含有Builder接口聲明的變量。指揮者的職責是負責向用戶提供具體的生成器,即指揮者將請求具體生成器來構造用戶所需要的Product對象,如果所請求的具體生成器成功的構造出Product對象,指揮者就可以讓該具體生成器返回所構造的Product對象。(可以不需要)
?4、類的關系圖
5、代碼實現
?
package org.sunday.builder;/*** 產品* @author sunday**/ public class PanelProduct {private Label lable;private TextField textField;private Button button;public Label getLable() {return lable;}public void setLable(Label lable) {this.lable = lable;}public TextField getTextField() {return textField;}public void setTextField(TextField textField) {this.textField = textField;}public Button getButton() {return button;}public void setButton(Button button) {this.button = button;}@Overridepublic String toString() {return lable.getColor()+"標簽 "+textField.getColor()+"輸入框 " + button.getColor() + "按鈕";} }
?
?
運行結果:
?
?
?
?
?
總結
以上是生活随笔為你收集整理的设计模式(三)之生成器模式(Builder Pattern)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android10 文件系统,文件系统之
- 下一篇: Bilinear Pairing双线性配