CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này phân tích một cách toàn diện về builder sample và các triển khai C++ có liên quan trong các mẫu thiết kế, được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.
Có rất nhiều tấm gương về những người xây dựng trong cuộc sống. Cá nhân tôi cảm thấy rằng cuộc sống đại học là trải nghiệm tuyệt vời nhất của mô hình người xây dựng: Để hoàn thành chương trình giáo dục đại học, quá trình giáo dục đại học thường được chia thành 4 học kỳ nên không có nghiên cứu nào có thể được coi là xây dựng một công trình hoàn chỉnh. trường đại học là một phần của quá trình xây dựng giáo dục. Kết quả cuối cùng mà mỗi người đạt được sau quá trình xây dựng 4 năm (4 giai đoạn) này là khác nhau, bởi vì nhiều thông số (cơ hội và cơ hội gặp gỡ của mỗi người) có thể đã được đưa vào. quá trình xây dựng bốn giai đoạn không hoàn toàn giống nhau).
Mẫu xây dựng giải quyết chính xác vấn đề này: khi đối tượng chúng ta muốn tạo rất phức tạp (thường bao gồm nhiều đối tượng khác), chúng ta cần quá trình tạo đối tượng phức tạp và cách thể hiện đối tượng này ( Display ), ưu điểm của việc này là xây dựng các đối tượng phức tạp theo từng bước Vì các tham số có thể được đưa vào trong quá trình xây dựng của từng bước nên việc hiển thị đối tượng cuối cùng được tạo qua các bước tương tự sẽ khác nhau.
Xây dựng thuộc tính của đối tượng
Trong một số trường hợp, một đối tượng sẽ có những thuộc tính quan trọng không thể được sử dụng như một sản phẩm hoàn chỉnh cho đến khi chúng có những giá trị phù hợp. Ví dụ: một email có địa chỉ người gửi, địa chỉ người nhận, chủ đề, nội dung, phụ lục, v.v. nhưng không thể gửi email trước khi địa chỉ người nhận tối thiểu chưa được gán giá trị.
Trong một số trường hợp, một số thuộc tính của một đối tượng phải được gán theo một thứ tự nhất định mới có ý nghĩa. Trước khi một thuộc tính được gán giá trị, thuộc tính khác không thể được gán giá trị. Những tình huống này làm cho việc xây dựng các thuộc tính liên quan đến logic nghiệp vụ phức tạp.
Lúc này, đối tượng tương đương với một sản phẩm cần chế tạo và các thuộc tính này của đối tượng tương đương với các bộ phận của sản phẩm là quá trình lắp ráp các bộ phận. Vì quá trình lắp ráp các bộ phận rất phức tạp nên quá trình lắp ráp các "bộ phận" này thường được "ngoại hóa" thành một đối tượng được gọi là người xây dựng. Thứ mà người xây dựng trả lại cho khách hàng là một đối tượng sản phẩm với tất cả các bộ phận đã được chế tạo.
Những cân nhắc về việc đặt tên
Sở dĩ dùng "builder" thay vì "generator" là vì để sản xuất sản phẩm từ các bộ phận thì "build" thì phù hợp hơn, còn "create" hay "generate" là không phù hợp. Sơ đồ cấu trúc điển hình của mẫu xây dựng là:

Điểm mấu chốt của mẫu trình xây dựng là đối tượng Director không trực tiếp trả về đối tượng mà tạo đối tượng theo từng bước (BuildPartA, BuildPartB, BuildPartC). Tất nhiên, Giám đốc ở đây có thể cung cấp một giao diện mặc định trả về các đối tượng (nghĩa là trả về việc tạo các đối tượng phức tạp chung, nghĩa là không chỉ định hoặc chỉ định cụ thể các tham số trong BuildPart). Triển khai mô hình xây dựng.
Ví dụ về mã hoàn chỉnh (mã): Việc triển khai chế độ trình tạo rất đơn giản. Để tạo điều kiện thuận lợi cho người mới bắt đầu học tập và tham khảo, mã triển khai hoàn chỉnh sẽ được cung cấp tại đây (tất cả các mã được triển khai bằng C++ và được thử nghiệm và chạy trong VC 6.0).
Đoạn mã 1: Product.h.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#ifndef _SẢN PHẨM_H_
#định nghĩa _SẢN PHẨM_H_
lớp học
Sản phẩm{
công cộng
:
Sản phẩm();
~Sản phẩm();
vô hiệu
Sản xuất phần();
được bảo vệ
:
riêng tư
:
};
lớp học
Sản phẩmPart{
công cộng
:
Sản phẩmPart();
~Phần sản phẩm();
ProductPart* BuildPart();
được bảo vệ
:
riêng tư
:
};
#kết thúc //~_SẢN PHẨM_H_
|
Đoạn mã 2: Product.cpp.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include "Sản phẩm.h"
#include
sử dụng
không gian tên
tiêu chuẩn;
Sản phẩm::Sản phẩm(){
Sản xuất phần();
cout<<
"trả lại sản phẩm"
<<>
}
Sản phẩm::~Sản phẩm(){
}
vô hiệu
Sản phẩm::Sản xuất phần(){
cout<<
"xây dựng một phần sản phẩm.."
<<>
}
Phần sản phẩm::Phần sản phẩm(){
}
Phần sản phẩm::~Phần sản phẩm(){
}
ProductPart* ProductPart::BuildPart(){
trở lại
mới
Sản phẩmPart;
}
|
Đoạn mã 3: Builder.h.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#ifndef _XÂY_DẠNG_H_
#xác định _BUILDER_H_
#include
sử dụng
không gian tên
tiêu chuẩn;
lớp học
Sản phẩm;
lớp học
Người xây dựng{
công cộng
:
ảo
~Người xây dựng();
ảo
vô hiệu
Xây dựng phần A(
hằng số
chuỗi & buildPara) = 0;
ảo
vô hiệu
Xây dựng phần B(
hằng số
chuỗi & buildPara) = 0;
ảo
vô hiệu
Xây dựng phần C(
hằng số
chuỗi & buildPara) = 0;
ảo
Sản phẩm* GetProduct() = 0;
được bảo vệ
:
Người xây dựng();
riêng tư
:
};
lớp học
Người xây dựng bê tông:
công cộng
Người xây dựng{
công cộng
:
Người xây dựng bê tông();
~Xây dựng bê tông();
vô hiệu
Xây dựng phần A(
hằng số
chuỗi & buildPara);
vô hiệu
Xây dựng phần B(
hằng số
chuỗi & buildPara);
vô hiệu
Xây dựng phần C(
hằng số
chuỗi & buildPara);
Sản phẩm* GetProduct();
được bảo vệ
:
riêng tư
:
};
#endif //~_XÂY_DẠNG_H_
|
Đoạn mã 4: Builder.cpp.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include "Builder.h"
#include "Sản phẩm.h"
#include
sử dụng
không gian tên
tiêu chuẩn;
Người xây dựng::Người xây dựng(){
}
Người xây dựng::~Người xây dựng(){
}
ConcreteBuilder::ConcreteBuilder(){
}
ConcreteBuilder::~ConcreteBuilder(){
}
vô hiệu
ConcreteBuilder::BuildPartA(
hằng số
chuỗi& buildPara){
cout<<
"Bước 1: Xây dựng Phần A..."
<
}
vô hiệu
ConcreteBuilder::BuildPartB(
hằng số
chuỗi& buildPara){
cout<<
"Bước 1: Xây dựng Phần B..."
<
}
vô hiệu
ConcreteBuilder::BuildPartC(
hằng số
chuỗi& buildPara){
cout<<
"Bước 1: Xây dựng Phần C..."
<
}
Sản phẩm* ConcreteBuilder::GetProduct(){
Xây dựng phần A(
"được xác định trước"
);
Xây dựng phần B(
"được xác định trước"
);
Xây dựng phần C(
"được xác định trước"
);
trở lại
mới
Sản phẩm();
}
|
Đoạn mã 5: Director.h.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#ifndef _GIÁM ĐỐC_H_
#xác định _GIÁM ĐỐC_H_
lớp học
Người xây dựng;
lớp học
Giám đốc{
công cộng
:
Giám đốc (Xây dựng* tòa nhà);
~Giám đốc();
vô hiệu
Xây dựng();
được bảo vệ
:
riêng tư
:
Người xây dựng* _bld;
};
#endif //~_GIÁM ĐỐC_H_
|
Đoạn mã 6: Director.cpp.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include "director.h"
#include "Builder.h"
Director::Director(Builder* bld){
_bld = bld;
}
Giám đốc::~Giám đốc(){
}
vô hiệu
Giám đốc::Xây dựng(){
_bld->Xây dựng phần A(
"do người dùng định nghĩa"
);
_bld->Xây dựng phần B(
"do người dùng định nghĩa"
);
_bld->Xây dựng phần C(
"do người dùng định nghĩa"
);
}
|
Đoạn mã 7: main.cpp.
?
1
2
3
4
5
6
7
8
9
10
11
|
#include "Builder.h"
#include "Sản phẩm.h"
#include "Director.h"
#include
sử dụng
không gian tên
tiêu chuẩn;
số nguyên
chủ yếu(
số nguyên
đối số,
char
* đối số[]){
Giám đốc* d =
mới
Giám đốc(
mới
Xây dựng bê tông());
d->Xây dựng();
trở lại
0;
}
|
Mô tả mã: Trong mã ví dụ của chế độ trình xây dựng, các tham số của BuildPart được chuyển vào thông qua lập trình viên máy khách. Để giải thích một cách đơn giản vấn đề, trên thực tế, ba tham số này có thể được chuyển vào trong trình tạo. Xây dựng các tham số của phương thức để bạn có thể có được các đối tượng phức tạp với các sắc thái khác nhau.
Mẫu Builder nên được sử dụng trong các tình huống sau:
1. Đối tượng sản phẩm cần được tạo có cấu trúc bên trong phức tạp. 2. Các thuộc tính của các đối tượng sản phẩm cần được tạo phụ thuộc vào nhau và mẫu trình tạo có thể buộc thứ tự tạo. 3. Trong quá trình tạo đối tượng, một số đối tượng khác trong hệ thống sẽ được sử dụng, những đối tượng này không dễ có được trong quá trình tạo đối tượng sản phẩm.
Sử dụng chế độ xây dựng chủ yếu có tác dụng sau:
1. Việc sử dụng chế độ xây dựng cho phép thay đổi hình thức bên trong của sản phẩm một cách độc lập. Việc sử dụng mẫu xây dựng sẽ loại bỏ nhu cầu khách hàng biết chi tiết về cấu tạo bên trong của sản phẩm. 2. Mỗi Nhà xây dựng tương đối độc lập và không liên quan gì đến các Nhà xây dựng khác. 3. Sản phẩm cuối cùng được xây dựng theo mô hình dễ kiểm soát hơn.
Cuối cùng, bài viết này về phân tích toàn diện về mẫu trình xây dựng trong các mẫu thiết kế và cách triển khai C++ có liên quan sẽ kết thúc tại đây. Nếu bạn muốn biết thêm về phân tích toàn diện về mẫu trình xây dựng trong các mẫu thiết kế và cách triển khai C++ có liên quan, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục. để duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!