<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
建造者模式(Builder Pattern)屬於建立型模式。如果一個物件具有複雜的內部結構或者內部屬性本身相互依賴(有順序要求),甚至物件中的某些屬性的建立也有一個很複雜的過程,就可以使用建造者模式
業務程式碼
public class Product { private String part1; private String part2; public Product(String part1, String part2) { this.part1 = part1; this.part2 = part2; } @Override public String toString() { return "Product{" + "part1='" + part1 + ''' + ", part2='" + part2 + ''' + '}'; } } //控制每個部件的具體建立 interface Builder { void buildPart1(String part1); void buildPart2(String part2); Product build(); } class ChinaBuilder implements Builder{ private String part1; private String part2; @Override public void buildPart1(String part1) { this.part1 = "國產" + part1; } @Override public void buildPart2(String part2) { this.part2 = "國產" + part2; } @Override public Product build() { return new Product(part1, part2); } } //控制組裝部件的順序 class Director{ private Builder builder; public Director(Builder builder) { this.builder = builder; } public Product construct(String part1, String part2){ builder.buildPart1(part1); builder.buildPart2(part2); return builder.build(); } }
測試程式碼
public class BuilderTest { public static void main(String[] args) { Director director = new Director(new ChinaBuilder()); Product product = director.construct("感測器", "晶片"); System.out.println(product); //Product{part1='國產感測器', part2='國產晶片'} } }
我們先以靜態內部類的方式實現簡單場景下的建造者模式(以優雅的鏈式呼叫代替set)
業務程式碼
public class Product { private String part1; private String part2; public Product(String part1, String part2) { this.part1 = part1; this.part2 = part2; } @Override public String toString() { return "Product{" + "part1='" + part1 + ''' + ", part2='" + part2 + ''' + '}'; } static class Builder { private String part1; private String part2; public Builder part1(String part1) { this.part1 = part1; return this; } public Builder part2(String part2) { this.part2 = part2; return this; } public Product build(){ return new Product(part1, part2); } } }
測試類
public class ProductTest { public static void main(String[] args) { Product product = new Product.Builder().part1("感測器").part2("晶片").build(); System.out.println(product); //Product{part1='感測器', part2='晶片'} } }
下面看看lombok的@Builder註解的實現
業務程式碼
@Builder public class Product { private String part1; private String part2; }
在IDEA中開啟Product.class檔案,可以看出實際就是使用的簡單場景的建造者模式
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package com.designpattern.create.builder.lombok; public class Product { private String part1; private String part2; Product(String part1, String part2) { this.part1 = part1; this.part2 = part2; } public static Product.ProductBuilder builder() { return new Product.ProductBuilder(); } public static class ProductBuilder { private String part1; private String part2; ProductBuilder() { } public Product.ProductBuilder part1(String part1) { this.part1 = part1; return this; } public Product.ProductBuilder part2(String part2) { this.part2 = part2; return this; } public Product build() { return new Product(this.part1, this.part2); } public String toString() { return "Product.ProductBuilder(part1=" + this.part1 + ", part2=" + this.part2 + ")"; } } }
org.springframework.web.servlet.mvc.method.RequestMappingInfo.DefaultBuilder
到此這篇關於Java建立型模式之建造者模式詳解的文章就介紹到這了,更多相關Java建造者模式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45