SpringCloud服務(wù)注冊中心數(shù)據(jù)一致性問題
本文深入探討了 Spring Cloud 服務(wù)注冊中心的數(shù)據(jù)一致性問題。
從 Spring Cloud 的背景引入,詳細(xì)解釋了服務(wù)注冊中心、數(shù)據(jù)一致性等核心概念,闡述了它們之間的關(guān)系。接著分析了保證數(shù)據(jù)一致性的算法原理,給出了具體的操作步驟和代碼示例。還介紹了實(shí)際應(yīng)用場景、相關(guān)工具和資源,探討了未來發(fā)展趨勢與挑戰(zhàn)。
旨在幫助讀者全面理解 Spring Cloud 服務(wù)注冊中心數(shù)據(jù)一致性的重要性和實(shí)現(xiàn)方法。
背景介紹
目的和范圍
在當(dāng)今的分布式系統(tǒng)中,Spring Cloud 被廣泛應(yīng)用于構(gòu)建微服務(wù)架構(gòu)。服務(wù)注冊中心是 Spring Cloud 中的關(guān)鍵組件,它負(fù)責(zé)管理各個(gè)微服務(wù)的注冊與發(fā)現(xiàn)。然而,由于分布式系統(tǒng)的復(fù)雜性,服務(wù)注冊中心的數(shù)據(jù)一致性面臨諸多挑戰(zhàn)。本文的目的就是深入探討 Spring Cloud 服務(wù)注冊中心數(shù)據(jù)一致性的問題,涵蓋了相關(guān)概念的解釋、算法原理的分析、實(shí)際應(yīng)用場景的介紹等多個(gè)方面。
預(yù)期讀者
本文適合對 Spring Cloud 有一定了解,想要深入學(xué)習(xí)服務(wù)注冊中心數(shù)據(jù)一致性的開發(fā)者、架構(gòu)師以及對分布式系統(tǒng)感興趣的技術(shù)愛好者。
文檔結(jié)構(gòu)概述
本文首先介紹相關(guān)的核心概念,包括服務(wù)注冊中心、數(shù)據(jù)一致性等,并解釋它們之間的關(guān)系。然后詳細(xì)闡述保證數(shù)據(jù)一致性的算法原理和具體操作步驟,通過數(shù)學(xué)模型和公式進(jìn)行深入分析。接著給出項(xiàng)目實(shí)戰(zhàn)的代碼案例和詳細(xì)解釋。之后介紹實(shí)際應(yīng)用場景、工具和資源推薦,探討未來發(fā)展趨勢與挑戰(zhàn)。最后進(jìn)行總結(jié),提出思考題,并提供常見問題與解答和擴(kuò)展閱讀參考資料。
術(shù)語表
核心術(shù)語定義:
- Spring Cloud:是一個(gè)基于 Spring Boot 構(gòu)建的開發(fā)工具集,用于快速構(gòu)建分布式系統(tǒng)中的各種服務(wù)。
- 服務(wù)注冊中心:在分布式系統(tǒng)中,它是一個(gè)存儲服務(wù)信息的組件,各個(gè)微服務(wù)將自己的信息注冊到注冊中心,其他服務(wù)可以從注冊中心發(fā)現(xiàn)并調(diào)用這些服務(wù)。
- 數(shù)據(jù)一致性:指在分布式系統(tǒng)中,各個(gè)節(jié)點(diǎn)上的數(shù)據(jù)保持一致的狀態(tài)。
相關(guān)概念解釋:
- 分布式系統(tǒng):由多個(gè)獨(dú)立的計(jì)算機(jī)節(jié)點(diǎn)通過網(wǎng)絡(luò)連接組成的系統(tǒng),這些節(jié)點(diǎn)可以協(xié)同工作,共同完成一個(gè)任務(wù)。
- CAP 理論:在一個(gè)分布式系統(tǒng)中,不可能同時(shí)滿足一致性(Consistency)、可用性(Availability)和分區(qū)容錯(cuò)性(Partition tolerance)這三個(gè)特性,最多只能同時(shí)滿足其中兩個(gè)。
縮略詞列表:
- Eureka:Spring Cloud 中常用的服務(wù)注冊中心。
- ZooKeeper:一個(gè)分布式協(xié)調(diào)服務(wù),也可作為服務(wù)注冊中心。
- Consul:一個(gè)支持多數(shù)據(jù)中心、分布式的服務(wù)發(fā)現(xiàn)和配置管理工具。
核心概念與聯(lián)系
故事引入
想象有一個(gè)大型的游樂園,里面有各種各樣的游樂項(xiàng)目,比如過山車、旋轉(zhuǎn)木馬等。每個(gè)游樂項(xiàng)目就像是一個(gè)微服務(wù),而游樂園的管理中心就像是服務(wù)注冊中心。游客來到游樂園,首先會去管理中心了解每個(gè)游樂項(xiàng)目的位置和開放狀態(tài)。但是,由于游樂園很大,各個(gè)游樂項(xiàng)目的狀態(tài)可能會隨時(shí)發(fā)生變化,比如某個(gè)游樂項(xiàng)目突然出現(xiàn)故障需要關(guān)閉。這時(shí),管理中心就需要及時(shí)更新信息,讓游客能夠獲取到準(zhǔn)確的游樂項(xiàng)目狀態(tài)。如果管理中心的數(shù)據(jù)更新不及時(shí),游客可能會白跑一趟,這就相當(dāng)于服務(wù)注冊中心的數(shù)據(jù)不一致,會影響到服務(wù)的正常調(diào)用。
核心概念解釋(像給小學(xué)生講故事一樣)
核心概念一:服務(wù)注冊中心
服務(wù)注冊中心就像是一個(gè)大的信息庫,各個(gè)微服務(wù)就像是一個(gè)個(gè)小朋友。每個(gè)小朋友都要到這個(gè)信息庫那里去登記自己的信息,比如自己的名字、住在哪里等。其他小朋友想要找某個(gè)小朋友玩的時(shí)候,就可以到這個(gè)信息庫去查詢他的信息。在 Spring Cloud 里,微服務(wù)把自己的 IP 地址、端口號等信息注冊到服務(wù)注冊中心,其他微服務(wù)就可以從注冊中心找到它并進(jìn)行調(diào)用。
核心概念二:數(shù)據(jù)一致性
數(shù)據(jù)一致性就像是大家都在玩一個(gè)傳話游戲,從第一個(gè)人開始傳話,一直傳到最后一個(gè)人。如果最后一個(gè)人聽到的話和第一個(gè)人說的話是一樣的,那就說明這個(gè)傳話過程的數(shù)據(jù)是一致的。在分布式系統(tǒng)中,各個(gè)節(jié)點(diǎn)上的數(shù)據(jù)就像是傳話游戲中的話,要保證它們都一樣,這樣才能保證系統(tǒng)的正常運(yùn)行。
核心概念三:CAP 理論
我們可以把 CAP 理論想象成一個(gè)三角形,三角形的三個(gè)角分別代表一致性、可用性和分區(qū)容錯(cuò)性。就像一個(gè)小朋友不可能同時(shí)左手拿蘋果、右手拿香蕉,還能又蹦又跳一樣,在一個(gè)分布式系統(tǒng)中,不可能同時(shí)滿足一致性、可用性和分區(qū)容錯(cuò)性這三個(gè)特性,最多只能同時(shí)滿足其中兩個(gè)。
核心概念之間的關(guān)系(用小學(xué)生能理解的比喻)
服務(wù)注冊中心、數(shù)據(jù)一致性和 CAP 理論就像一個(gè)團(tuán)隊(duì)。服務(wù)注冊中心是隊(duì)長,它負(fù)責(zé)管理各個(gè)微服務(wù)的信息。數(shù)據(jù)一致性是隊(duì)員們要遵守的規(guī)則,大家都要保證自己的數(shù)據(jù)和隊(duì)長那里的數(shù)據(jù)一樣。而 CAP 理論就像是團(tuán)隊(duì)的限制條件,隊(duì)長在管理團(tuán)隊(duì)的時(shí)候,要根據(jù)這個(gè)限制條件來做決策。
概念一和概念二的關(guān)系
服務(wù)注冊中心和數(shù)據(jù)一致性的關(guān)系就像圖書館和圖書信息的關(guān)系。圖書館就像是服務(wù)注冊中心,里面記錄了很多圖書的信息。如果圖書館里的圖書信息和實(shí)際的圖書擺放不一致,讀者就可能找不到自己想要的書。同樣,服務(wù)注冊中心的數(shù)據(jù)如果不一致,其他微服務(wù)就可能無法正確地發(fā)現(xiàn)和調(diào)用需要的服務(wù)。
概念二和概念三的關(guān)系
數(shù)據(jù)一致性和 CAP 理論的關(guān)系就像在一個(gè)游戲中,我們想要讓每個(gè)玩家的游戲數(shù)據(jù)都一樣(數(shù)據(jù)一致性),但是游戲服務(wù)器可能會出現(xiàn)網(wǎng)絡(luò)故障(分區(qū)容錯(cuò)性),這時(shí)候我們就要在保證數(shù)據(jù)一致和讓玩家能夠繼續(xù)玩游戲(可用性)之間做出選擇。根據(jù) CAP 理論,我們最多只能同時(shí)滿足其中兩個(gè)特性。
概念一和概念三的關(guān)系
服務(wù)注冊中心和 CAP 理論的關(guān)系就像一個(gè)城市的交通管理中心和交通規(guī)則的關(guān)系。交通管理中心就像服務(wù)注冊中心,它要管理城市里的交通信息。而交通規(guī)則就像 CAP 理論,交通管理中心在管理交通的時(shí)候,要根據(jù)交通規(guī)則來做出決策,比如在某些路段出現(xiàn)擁堵(分區(qū)容錯(cuò)性)時(shí),是要保證車輛都能按照正確的路線行駛(一致性),還是讓車輛盡快通過(可用性)。
核心概念原理和架構(gòu)的文本示意圖
在 Spring Cloud 中,服務(wù)注冊中心的架構(gòu)通常包括客戶端和服務(wù)器端??蛻舳耸歉鱾€(gè)微服務(wù),它們將自己的信息注冊到服務(wù)器端(服務(wù)注冊中心)。服務(wù)器端負(fù)責(zé)存儲和管理這些信息,并提供查詢服務(wù)。數(shù)據(jù)一致性的實(shí)現(xiàn)需要考慮多個(gè)方面,包括服務(wù)注冊、服務(wù)更新、服務(wù)刪除等操作在各個(gè)節(jié)點(diǎn)上的同步。
Mermaid 流程圖

核心算法原理 & 具體操作步驟
核心算法原理
在 Spring Cloud 服務(wù)注冊中心中,常見的保證數(shù)據(jù)一致性的算法有 Paxos 算法和 Raft 算法。這里以 Raft 算法為例進(jìn)行介紹。
Raft 算法將節(jié)點(diǎn)分為三種角色:領(lǐng)導(dǎo)者(Leader)、跟隨者(Follower)和候選人(Candidate)。領(lǐng)導(dǎo)者負(fù)責(zé)處理所有的客戶端請求和日志復(fù)制,跟隨者接收領(lǐng)導(dǎo)者的日志更新,候選人用于選舉新的領(lǐng)導(dǎo)者。
具體操作步驟
選舉階段
- 當(dāng)系統(tǒng)啟動(dòng)或領(lǐng)導(dǎo)者故障時(shí),跟隨者會轉(zhuǎn)變?yōu)楹蜻x人,開始進(jìn)行選舉。
- 候選人向其他節(jié)點(diǎn)發(fā)送請求投票的消息。
- 其他節(jié)點(diǎn)收到請求后,如果還沒有投票給其他候選人,就會投票給該候選人。
- 當(dāng)候選人獲得超過半數(shù)節(jié)點(diǎn)的投票時(shí),就會成為新的領(lǐng)導(dǎo)者。
日志復(fù)制階段
- 客戶端向領(lǐng)導(dǎo)者發(fā)送請求。
- 領(lǐng)導(dǎo)者將請求作為一個(gè)日志條目添加到自己的日志中,并向其他跟隨者發(fā)送復(fù)制日志的消息。
- 跟隨者收到消息后,將日志條目添加到自己的日志中,并向領(lǐng)導(dǎo)者發(fā)送確認(rèn)消息。
- 當(dāng)領(lǐng)導(dǎo)者收到超過半數(shù)跟隨者的確認(rèn)消息后,將該日志條目標(biāo)記為已提交,并將處理結(jié)果返回給客戶端。
Python 代碼示例
# 簡單模擬 Raft 算法的選舉過程
class Node:
def __init__(self, id):
self.id = id
self.state = "follower"
self.vote_count = 0
def request_vote(self):
if self.state == "follower":
self.state = "candidate"
self.vote_count = 1
print(f"Node {self.id} becomes a candidate and requests votes.")
# 模擬向其他節(jié)點(diǎn)發(fā)送請求投票的消息
for other_node in nodes:
if other_node.id != self.id:
other_node.receive_vote_request(self.id)
def receive_vote_request(self, candidate_id):
if self.state == "follower":
print(f"Node {self.id} receives a vote request from Node {candidate_id} and votes for it.")
for node in nodes:
if node.id == candidate_id:
node.vote_count += 1
if node.vote_count > len(nodes) // 2:
node.become_leader()
def become_leader(self):
self.state = "leader"
print(f"Node {self.id} becomes the leader.")
# 創(chuàng)建節(jié)點(diǎn)
nodes = [Node(1), Node(2), Node(3)]
# 觸發(fā)選舉
nodes[0].request_vote()數(shù)學(xué)模型和公式 & 詳細(xì)講解 & 舉例說明
數(shù)學(xué)模型
在 Raft 算法中,選舉的正確性可以用以下數(shù)學(xué)模型來描述。假設(shè)系統(tǒng)中有 n n n 個(gè)節(jié)點(diǎn),要保證選舉的正確性,需要滿足以下條件:
在選舉過程中,一個(gè)節(jié)點(diǎn)要成為領(lǐng)導(dǎo)者,必須獲得超過半數(shù)節(jié)點(diǎn)的投票,即 投票數(shù) > n 2 \text{投票數(shù)} > \frac{n}{2} 投票數(shù)>2n?。
詳細(xì)講解
當(dāng)一個(gè)節(jié)點(diǎn)成為候選人并開始請求投票時(shí),它需要向其他節(jié)點(diǎn)發(fā)送請求投票的消息。其他節(jié)點(diǎn)根據(jù)自己的狀態(tài)決定是否投票給該候選人。如果一個(gè)節(jié)點(diǎn)還沒有投票給其他候選人,就會投票給當(dāng)前候選人。當(dāng)候選人獲得的投票數(shù)超過 n 2 \frac{n}{2} 2n? 時(shí),就可以成為領(lǐng)導(dǎo)者。
舉例說明
假設(shè)有 5 個(gè)節(jié)點(diǎn)( n = 5 n = 5 n=5),那么一個(gè)候選人需要獲得至少 3 票( 5 2 = 2.5 \frac{5}{2} = 2.5 25?=2.5,向上取整為 3)才能成為領(lǐng)導(dǎo)者。如果候選人 A 獲得了 3 個(gè)節(jié)點(diǎn)的投票,那么它就可以成為領(lǐng)導(dǎo)者。
項(xiàng)目實(shí)戰(zhàn):代碼實(shí)際案例和詳細(xì)解釋說明
開發(fā)環(huán)境搭建
創(chuàng)建 Spring Boot 項(xiàng)目:使用 Spring Initializr 創(chuàng)建一個(gè) Spring Boot 項(xiàng)目,添加 Spring Cloud Eureka Server 依賴。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>配置 Eureka Server:在 application.properties 文件中進(jìn)行配置。
server.port=8761 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false
源代碼詳細(xì)實(shí)現(xiàn)和代碼解讀
創(chuàng)建 Eureka Server 主類
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}代碼解讀:
@SpringBootApplication:這是一個(gè)組合注解,包含了@Configuration、@EnableAutoConfiguration和@ComponentScan,用于啟動(dòng) Spring Boot 應(yīng)用。@EnableEurekaServer:啟用 Eureka Server 功能,將當(dāng)前應(yīng)用作為服務(wù)注冊中心。
創(chuàng)建微服務(wù)并注冊到 Eureka Server
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.client.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class MyServiceApplication {
public static void main(String[] args) {
SpringApplication.run(MyServiceApplication.class, args);
}
}代碼解讀:
@EnableEurekaClient:將當(dāng)前微服務(wù)注冊到 Eureka Server。
代碼解讀與分析
通過以上代碼,我們創(chuàng)建了一個(gè) Eureka Server 作為服務(wù)注冊中心,以及一個(gè)微服務(wù)并將其注冊到注冊中心。Eureka Server 會自動(dòng)管理微服務(wù)的注冊信息,并提供服務(wù)發(fā)現(xiàn)的功能。在實(shí)際應(yīng)用中,還需要考慮數(shù)據(jù)一致性的問題,例如當(dāng)一個(gè)微服務(wù)下線時(shí),Eureka Server 要及時(shí)更新服務(wù)信息,保證其他服務(wù)獲取到的信息是最新的。
實(shí)際應(yīng)用場景
微服務(wù)架構(gòu)中的服務(wù)發(fā)現(xiàn)
在一個(gè)大型的微服務(wù)架構(gòu)中,各個(gè)微服務(wù)之間需要相互調(diào)用。服務(wù)注冊中心可以幫助各個(gè)微服務(wù)發(fā)現(xiàn)其他服務(wù)的位置和信息,從而實(shí)現(xiàn)服務(wù)之間的通信。例如,一個(gè)電商系統(tǒng)中的商品服務(wù)、訂單服務(wù)和用戶服務(wù),它們都可以將自己的信息注冊到服務(wù)注冊中心,其他服務(wù)可以從注冊中心發(fā)現(xiàn)并調(diào)用這些服務(wù)。
服務(wù)的動(dòng)態(tài)擴(kuò)容與縮容
當(dāng)系統(tǒng)的負(fù)載發(fā)生變化時(shí),可以動(dòng)態(tài)地增加或減少微服務(wù)的實(shí)例數(shù)量。服務(wù)注冊中心可以及時(shí)更新服務(wù)的實(shí)例信息,保證其他服務(wù)能夠正確地發(fā)現(xiàn)和調(diào)用這些服務(wù)。例如,在電商系統(tǒng)的促銷活動(dòng)期間,可以增加訂單服務(wù)的實(shí)例數(shù)量,以應(yīng)對高并發(fā)的請求。
工具和資源推薦
- Spring Cloud 官方文檔:提供了詳細(xì)的 Spring Cloud 相關(guān)知識和使用指南。
- Eureka 官方文檔:深入了解 Eureka 服務(wù)注冊中心的功能和配置。
- Raft 算法論文:可以幫助讀者深入理解 Raft 算法的原理和實(shí)現(xiàn)。
未來發(fā)展趨勢與挑戰(zhàn)
發(fā)展趨勢
- 多注冊中心的融合:未來可能會出現(xiàn)將多種服務(wù)注冊中心融合使用的情況,以充分發(fā)揮它們的優(yōu)勢。
- 智能化的數(shù)據(jù)一致性管理:利用人工智能技術(shù),實(shí)現(xiàn)更加智能化的數(shù)據(jù)一致性管理,提高系統(tǒng)的性能和可靠性。
挑戰(zhàn)
- 網(wǎng)絡(luò)延遲和分區(qū)問題:在分布式系統(tǒng)中,網(wǎng)絡(luò)延遲和分區(qū)問題是影響數(shù)據(jù)一致性的重要因素,如何在這些情況下保證數(shù)據(jù)的一致性是一個(gè)挑戰(zhàn)。
- 大規(guī)模集群的管理:隨著系統(tǒng)規(guī)模的不斷擴(kuò)大,服務(wù)注冊中心需要管理的服務(wù)數(shù)量也會越來越多,如何高效地管理大規(guī)模集群的數(shù)據(jù)一致性是一個(gè)亟待解決的問題。
總結(jié):學(xué)到了什么?
核心概念回顧
- 我們學(xué)習(xí)了 Spring Cloud、服務(wù)注冊中心和數(shù)據(jù)一致性的概念。
- Spring Cloud 是一個(gè)用于構(gòu)建分布式系統(tǒng)的開發(fā)工具集,服務(wù)注冊中心是管理微服務(wù)信息的組件,數(shù)據(jù)一致性是指分布式系統(tǒng)中各個(gè)節(jié)點(diǎn)上的數(shù)據(jù)保持一致的狀態(tài)。
概念關(guān)系回顧
- 我們了解了服務(wù)注冊中心、數(shù)據(jù)一致性和 CAP 理論之間的關(guān)系。
- 服務(wù)注冊中心負(fù)責(zé)管理微服務(wù)的信息,數(shù)據(jù)一致性是系統(tǒng)要保證的目標(biāo),而 CAP 理論則是在分布式系統(tǒng)中需要考慮的限制條件。
思考題:動(dòng)動(dòng)小腦筋
- 思考題一:在一個(gè)分布式系統(tǒng)中,如果網(wǎng)絡(luò)分區(qū)發(fā)生,你會如何選擇保證數(shù)據(jù)一致性還是可用性?
- 思考題二:你能想到在實(shí)際項(xiàng)目中,還有哪些方法可以提高 Spring Cloud 服務(wù)注冊中心的數(shù)據(jù)一致性?
附錄:常見問題與解答
問題一:Eureka 如何保證數(shù)據(jù)一致性?
- Eureka 采用了一種 AP(可用性和分區(qū)容錯(cuò)性)的設(shè)計(jì),它更注重可用性。
- 在 Eureka 中,各個(gè)節(jié)點(diǎn)之間會定期進(jìn)行數(shù)據(jù)同步,但不保證強(qiáng)一致性。當(dāng)一個(gè)節(jié)點(diǎn)出現(xiàn)故障時(shí),其他節(jié)點(diǎn)仍然可以正常提供服務(wù)。
問題二:Raft 算法和 Paxos 算法有什么區(qū)別?
- Raft 算法和 Paxos 算法都是用于解決分布式系統(tǒng)中一致性問題的算法。
- Raft 算法更加易于理解和實(shí)現(xiàn),它將一致性問題分解為選舉和日志復(fù)制兩個(gè)階段。而 Paxos 算法相對復(fù)雜,但其理論基礎(chǔ)更加嚴(yán)謹(jǐn)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)將Doc/Docx格式的Word文檔轉(zhuǎn)換為PDF文件
這篇文章主要為大家詳細(xì)介紹了如何通過Java將Word文檔轉(zhuǎn)換為PDF、PDF/A和密碼保護(hù)的PDF文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-08-08
Java實(shí)現(xiàn)簡易生產(chǎn)者消費(fèi)者模型過程解析
這篇文章主要介紹了Java實(shí)現(xiàn)簡易生產(chǎn)者消費(fèi)者模型過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Sharding-JDBC自動(dòng)實(shí)現(xiàn)MySQL讀寫分離的示例代碼
本文主要介紹了Sharding-JDBC自動(dòng)實(shí)現(xiàn)MySQL讀寫分離,優(yōu)點(diǎn)在于數(shù)據(jù)源完全有Sharding-JDBC托管,寫操作自動(dòng)執(zhí)行master庫,讀操作自動(dòng)執(zhí)行slave庫,感興趣的可以了解一下2021-11-11
Java ArrayList底層方法的實(shí)現(xiàn)深度解析
ArrayList是Java集合框架中List接口的動(dòng)態(tài)數(shù)組實(shí)現(xiàn),可以方便的存儲和操作數(shù)據(jù),這篇文章是進(jìn)行ArrayList的一個(gè)自我實(shí)現(xiàn),讓我們從底層更深度地理解ArrayList(順序表),感興趣的朋友跟隨小編一起看看吧2025-10-10
Java運(yùn)用設(shè)計(jì)模式中的建造者模式構(gòu)建項(xiàng)目的實(shí)例解析
這篇文章主要介紹了Java運(yùn)用設(shè)計(jì)模式中的建造者模式構(gòu)建項(xiàng)目的實(shí)例解析,建造者模式對外隱藏創(chuàng)建過程的產(chǎn)品,使用組合的方式,由指揮者來決定建造的流程,需要的朋友可以參考下2016-04-04

