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

歡迎訪問 生活随笔!

生活随笔

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

java

Java描述设计模式(06):建造者模式

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

一、生活場景

基于建造者模式,描述軟件開發的流程。

1、代碼實現

/*** 基于建造者模式描述軟件開發*/ public class C01_InScene {public static void main(String[] args) {BuilderSoft builderSoft = new SoftImpl () ;ProjectManager manager = new ProjectManager(builderSoft) ;manager.createSoft();} }/*** 手機軟件產品開發*/ class MobileSoft {// 設計private String design ;// 架構private String frame ;// 開發private String develop ;// 上線private String online ;// 省略 GET SET 方法 } /*** 手機軟件流程抽象類*/ abstract class BuilderSoft {// 前期工作public abstract void earlyWork () ;// 中期工作public abstract void midWork () ;// 后期工作public abstract void lateWork () ;// 手機軟件完成public abstract MobileSoft builderSoft () ; }/*** 手機軟件具體實現*/ class SoftImpl extends BuilderSoft {private MobileSoft mobileSoft = new MobileSoft();@Overridepublic void earlyWork() {System.out.println("軟件前期設計...");}@Overridepublic void midWork() {System.out.println("軟件中期架構...");System.out.println("軟件中期開發...");}@Overridepublic void lateWork() {System.out.println("軟件后期上線...");}@Overridepublic MobileSoft builderSoft() {return mobileSoft ;} } /*** 項目經理:把控項目進度*/ class ProjectManager {private BuilderSoft builderSoft ;ProjectManager (BuilderSoft builderSoft){this.builderSoft = builderSoft ;}// 統籌項目周期public void createSoft (){builderSoft.earlyWork();builderSoft.midWork();builderSoft.lateWork();// MobileSoft mobileSoft = builderSoft.builderSoft() ;// return mobileSoft ;} }

2、代碼結構圖

二、建造者模式

1、基礎概念

建造模式是對象的創建模式。建造模式可以將一個產品的內部屬性描述與產品的生產過程分割,從而可以使一個建造過程生成具有不同的內部表象的產品對象。也就是使用一個中介對象封裝一系列的對象交互,使其各個對象不需要顯示的相互調用,而且可以單獨的改變對象之間的交互。

2、核心角色

1)、抽象建造者(Builder)角色

給出一個抽象接口,以規范產品對象的各個組成成分的建造。模式中直接創建產品對象的是具體建造者角色。

2)、具體建造者(ConcreteBuilder)角色

完成的任務包括:1.實現抽象建造者Builder所聲明的接口,給出完成創建產品實例的操作。2.在建造完成后,提供產品的實例。

3)、導演者(Director)角色

擔任這個角色的類調用具體建造者角色以創建產品對象。

4)、產品(Product)角色

產品便是建造的對象。一般來說,一個系統中會有多個產品類,而且這些產品類并不一定有共同的接口,而完全可以是不相關聯的。

3、模式圖解

4、源碼實現

/*** 建造者模式代碼*/ public class C02_Builder {public static void main(String[] args) {Builder builder = new ConcreteBuilder();Director director = new Director(builder);director.construct();Product product = builder.builderProduct();System.out.println(product.getAct1());System.out.println(product.getAct2());} } /*** 產品類*/ class Product {/*定義一些產品的操作*/private String act1;private String act2;public String getAct1() {return act1;}public void setAct1(String act1) {this.act1 = act1;}public String getAct2() {return act2;}public void setAct2(String act2) {this.act2 = act2;} } /*** Builder 抽象建造者類*/ abstract class Builder{public abstract void builderact1();public abstract void builderact2();public abstract Product builderProduct(); } /*** 具體建造者類*/ class ConcreteBuilder extends Builder{private Product product = new Product();@Overridepublic void builderact1() {product.setAct1("操作一:執行...");}@Overridepublic void builderact2() {product.setAct2("操作二:執行...");}@Overridepublic Product builderProduct() {return product;} } /*** Director 導演者類*/ class Director{/*使用建造者抽象類*/private Builder builder;Director(Builder builder){this.builder = builder;}/*負責調用各個建造方法*/public void construct(){builder.builderact1();builder.builderact2();} }

三、實際應用

1、JDK中應用

分析

1)、Appendable定義多個append() 抽象方法,抽象建造者。

2)、AbstractStringBuilder實現Appendable接口,已經作為了建造者,只是抽象類無法實例化。

3)、StringBuilder繼承AbstractStringBuilder,即作為具體建造者,也作為指揮者。

2、Spring中應用

源碼實現

// 系列方法 public BeanDefinitionBuilder setParentName(String parentName); public BeanDefinitionBuilder setFactoryMethod(String factoryMethod); public BeanDefinitionBuilder setFactoryMethodOnBean(String factoryMethod, String factoryBean); public BeanDefinitionBuilder addConstructorArgValue(@Nullable Object value); public BeanDefinitionBuilder addConstructorArgReference(String beanName); public BeanDefinitionBuilder addPropertyValue(String name, @Nullable Object value); // 構建Bean public AbstractBeanDefinition getRawBeanDefinition() {return this.beanDefinition; } public AbstractBeanDefinition getBeanDefinition() {this.beanDefinition.validate();return this.beanDefinition; }

上面兩處建造者模式的實際應用,都有點形散而神不散的感覺。

四、優缺點分析

  • 優點:減少類之間的相互依賴,降低耦合度。
  • 缺點:ConcreateBuilder變得臃腫龐大,邏輯復雜。

五、源代碼地址

GitHub地址:知了一笑 https://github.com/cicadasmile 碼云地址:知了一笑 https://gitee.com/cicadasmile


總結

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

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