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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

java设计模式4--建造者模式(Builder)

發布時間:2025/3/21 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java设计模式4--建造者模式(Builder) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文地址:http://www.cnblogs.com/archimedes/p/java-builder-pattern.html,轉載請注明源地址。

建造者模式

將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。

概述

當系統準備為用戶提供一個內部結構復雜的對象時,就可以使用生成器模式,使用該模式可以逐步地構造對象,使得對象的創建更具彈性。生成器模式的關鍵是將一個包含有多個組件對象的創建分成若干個步驟,并將這些步驟封裝在一個稱作生成器的接口中。

適用性

1.當創建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時。

2.當構造過程必須允許被構造的對象有不同的表示時。

參與者

1.Builder 為創建一個Product對象的各個部件指定抽象接口。

2.ConcreteBuilder 實現Builder的接口以構造和裝配該產品的各個部件。 定義并明確它所創建的表示。 提供一個檢索產品的接口。

3.Director 構造一個使用Builder接口的對象。

4.Product 表示被構造的復雜對象。ConcreteBuilder創建該產品的內部表示并定義它的裝配過程。 包含定義組成部件的類,包括將這些部件裝配成最終產品的接口。

建造者模式的結構與使用

模式的結構中包括四種角色:

?產品(Product)

?抽象生成器(Builder)

?具體生成器(ConcreteBuilder)

?指揮者(Director)?

模式的UML類圖

實戰部分

例1】:創建含有按鈕、標簽和文本框組件的容器。不同用戶對容器有不同的要求,比如某些用戶希望容器中只含有按鈕和標簽,某些用戶希望容器只含有按鈕和文本框等。另外用戶對組件在容器中的順序位置也有不同的要求,比如某些用戶要求組件在容器中從左至右的排列順序是按鈕、標簽、文本框,而某些用戶要求從左至右的排序時標簽、文本框、按鈕。?

模式的結構的描述與使用

1.產品(Product):?PanelProduct.java

import javax.swing.*; public class PanelProduct extends JPanel{JButton button; JLabel label; JTextField textField; }

2.抽象生成器(Builder):?Builer.java

import.javax.swing.*; public interface Builder{public abstract void buildButton();public abstract void buildLabel();public abstract void buildTextField();public abstract JPanel getPanel(); }

3.具體生成器(ConcreteBuilder)_1 :?ConcreteBuilderOne.java

import javax.swing.*; public class ConcreteBuilderOne implements Builder{private PanelProduct panel; ConcreteBuilderOne(){panel=new PanelProduct();} public void buildButton(){panel.button=new JButton("按鈕");}public void buildLabel(){panel.label=new JLabel("標簽");}public void buildTextField(){}public JPanel getPanel(){panel.add(panel.button); panel.add(panel.label);return panel;} }

3.具體生成器(ConcreteBuilder)_2 :?ConcreteBuilderTwo.java

import javax.swing.*; public class ConcreteBuilderTwo implements Builder{private PanelProduct panel; ConcreteBuilderTwo(){panel=new PanelProduct();} public void buildButton(){panel.button=new JButton("button");}public void buildLabel(){}public void buildTextField(){panel.textField=new JTextField("textField");}public JPanel getPanel(){panel.add(panel.textField);panel.add(panel.button);return panel;} }

4.指揮者(Director):?Director.java

import javax.swing.*; public class Director{private Builder builder;Director(Builder builder){this.builder=builder;}public JPanel constructProduct(){builder.buildButton();builder.buildLabel();builder.buildTextField();JPanel product=builder.getPanel();return product;} }

5.應用?Application.java

import javax.swing.*; public class Application{public static void main(String args[]){Builder builder=new ConcreteBuilderOne();Director director=new Director(builder);JPanel panel=director.constructProduct();JFrame frameOne=new JFrame();frameOne.add(panel);frameOne.setBounds(12,12,200,120);frameOne.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);frameOne.setVisible(true);builder=new ConcreteBuilderTwo();director=new Director(builder);panel=director.constructProduct();JFrame frameTwo=new JFrame();frameTwo.add(panel);frameTwo.setBounds(212,12,200,120);frameTwo.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);frameTwo.setVisible(true);} }

例2】:構建一個男人的類,使得構建和表示分離

類圖如下所示:

Builder

public interface PersonBuilder {void buildHead();void buildBody();void buildFoot();Person buildPerson(); }

ConcreteBuilder

public class ManBuilder implements PersonBuilder {Person person;public ManBuilder() {person = new Man();}@Overridepublic void buildHead() {person.setHead("建造男人的頭");}@Overridepublic void buildBody() {person.setBody("建造男人的身體");}@Overridepublic void buildFoot() {person.setFoot("建造男人的腳");}@Overridepublic Person buildPerson() {return person;} }

Director

public class PersonDirector {public Person constructPerson(PersonBuilder pb) {pb.buildHead();pb.buildBody();pb.buildFoot();return pb.buildPerson();} }

Product

public class Person {private String head;private String body;private String foot;public String getHead() {return head;}public void setHead(String head) {this.head = head;}public String getBody() {return body;}public void setBody(String body) {this.body = body;}public String getFoot() {return foot;}public void setFoot(String foot) {this.foot = foot;} } public class Man extends Person {}

Test

public class Test {public static void main(String[] args) {PersonDirector pd = new PersonDirector();Person person = pd.constructPerson(new ManBuilder());System.out.println(person.getBody());System.out.println(person.getFoot());System.out.println(person.getHead());} }

生成器模式的優點 ?

?生成器模式將對象的構造過程封裝在具體生成器中,用戶使用不同的具體生成器就可以得到該對象的不同表示。

?可以更加精細有效地控制對象的構造過程。生成器將對象的構造過程分解成若干步驟,這就使得程序可以更加精細,有效地控制整個對象的構造。

?生成器模式將對象的構造過程與創建該對象類解耦,使得對象的創建更加靈活有彈性。

?當增加新的具體生成器時,不必修改指揮者的代碼,即該模式滿足開-閉原則。

您還可能感興趣:

java設計模式系列:

java設計模式3--單例模式(Singleton)

java設計模式2--抽象工廠模式(Abstract Factory)

java設計模式1--工廠方法模式(Factory Method)?

java設計模式0--設計模式簡介

總結

以上是生活随笔為你收集整理的java设计模式4--建造者模式(Builder)的全部內容,希望文章能夠幫你解決所遇到的問題。

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