日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

设计模式(三)之生成器模式(Builder Pattern)

發布時間:2023/12/31 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式(三)之生成器模式(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() + "按鈕";} }


?

package org.sunday.builder;/*** 抽象生成器* @author sunday**/ public interface Builder {public abstract void builderLabel();public abstract void builderTextField();public abstract void builderButton();public abstract PanelProduct getPanel(); } package org.sunday.builder;/*** 具體生成器* @author sunday**/ public class BuilderOne implements Builder {private PanelProduct pp;public BuilderOne(PanelProduct pp) {this.pp = pp;}@Overridepublic void builderLabel() {pp.setLable(new Label("黑色"));}@Overridepublic void builderTextField() {pp.setTextField(new TextField("黑色"));}@Overridepublic void builderButton() {pp.setButton(new Button("黑色"));}@Overridepublic PanelProduct getPanel() {builderLabel();builderButton();builderTextField();return pp;} }


?

package org.sunday.builder;/*** 具體生成器* @author sunday**/ public class BuilderTwo implements Builder {private PanelProduct pp;public BuilderTwo(PanelProduct pp) {this.pp = pp;}@Overridepublic void builderLabel() {pp.setLable(new Label("黃色"));}@Overridepublic void builderTextField() {pp.setTextField(new TextField("藍色"));}@Overridepublic void builderButton() {pp.setButton(new Button("白色"));}@Overridepublic PanelProduct getPanel() {builderLabel();builderButton();builderTextField();return pp;} }


package org.sunday.builder;public class Test {public static void main(String[] args) {Builder one = new BuilderOne(new PanelProduct());System.out.println(one.getPanel().toString());Builder two = new BuilderTwo(new PanelProduct());System.out.println(two.getPanel().toString());} }

運行結果:

?

?

?

?

?

總結

以上是生活随笔為你收集整理的设计模式(三)之生成器模式(Builder Pattern)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。