Kita semua, sebagai pembangun, telah menghadapi situasi di mana kita perlu mencipta objek. Masalah dengan cuba mereka bentuk kelas generik untuk objek ini ialah ia boleh mengambil pelbagai bentuk. Contoh mudah: kelas Pengguna platform. Untuk pengguna biasa, kami mungkin hanya memerlukan e-mel dan nama pengguna. Walau bagaimanapun, untuk pentadbir platform, atribut tambahan seperti nombor telefon mungkin diperlukan. Kami juga boleh mempunyai pengguna Premium, yang memerlukan medan tambahan seperti nombor kad kredit dan sebagainya.
Jadi, bagaimana kita boleh meneruskan dengan cara generik?
Menghadapi masalah ini, komuniti pembangun bersetuju dengan corak penciptaan yang popular: Corak Reka Bentuk Pembina. Corak ini melibatkan pengasingan pembinaan objek kompleks daripada perwakilannya, membenarkan berbilang variasi objek dibuat menggunakan proses pembinaan yang sama.
Corak ini amat berguna dengan objek yang mempunyai banyak atribut, sesetengah daripadanya mungkin pilihan untuk kes tertentu tetapi tidak untuk yang lain, atau untuk objek yang memerlukan proses pemulaan terperinci. Ia membolehkan penciptaan objek langkah demi langkah yang fleksibel tanpa menjadikan kod terlalu rumit atau pembina terlalu terbeban.
Bahagian Kami Akan Liputi
Corak Reka Bentuk Pembina amat berguna dalam kes berikut:
Jika objek mempunyai banyak atribut, sesetengah daripadanya adalah pilihan: Kembali kepada masalah yang kami kemukakan pada permulaan artikel ini, mari kita pertimbangkan kelas Pengguna. Berdasarkan logik yang kami huraikan, jika kami membuat instantiate kelas Pengguna ini, kami boleh mempunyai kes yang berbeza: untuk pengguna biasa, normalUser = new User("houda", "houda@gmail.com", null, null), untuk pentadbir adminUser = new User("houda", "houda@gmail.com", "0657...", null), dan untuk pengguna premium, premiumUser = new User("houda", "houda@gmail.com", null, "1234..."). Ini menghasilkan banyak nilai nol dalam instantiasi.
Objek dengan proses penciptaan berbilang langkah: Contohnya ialah kelas Pesanan. Langkah pertama ialah membuat pesanan, yang kemudiannya disediakan, dan akhirnya dihantar. Menyediakan pesanan mungkin memerlukan beberapa langkah dan untuk memastikan susunan pembinaan yang betul, corak reka bentuk pembina sangat berguna.
Menyokong berbilang perwakilan objek yang sama: Contohnya, kelas Pakaian yang mempunyai atribut untuk fabrik, warna dan jenama. Item pakaian boleh berupa Seluar, T-Shirt atau jenis lain. Di sini, corak pembina membantu mencipta perwakilan berbeza bagi kelas asas yang sama.
untuk setiap kes yang telah kita lihat dalam bahagian sebelum kita akan melihat pelaksanaan pembina
class User { username: string; email: string; phoneNumber?: string; creditCard?: string; private constructor(builder: UserBuilder) { this.username = builder.username; this.email = builder.email; this.phoneNumber = builder.phoneNumber; this.creditCard = builder.creditCard; } public static get Builder() { return new UserBuilder(); } } class UserBuilder { username!: string; email!: string; phoneNumber?: string; creditCard?: string; public setUsername(username: string): UserBuilder { this.username = username; return this; } public setEmail(email: string): UserBuilder { this.email = email; return this; } public setPhoneNumber(phoneNumber: string): UserBuilder { this.phoneNumber = phoneNumber; return this; } public setCreditCard(creditCard: string): UserBuilder { this.creditCard = creditCard; return this; } public build(): User { return new User(this); } } // Usage const normalUser = User.Builder .setUsername("houda") .setEmail("houda@gmail.com") .build(); const adminUser = User.Builder .setUsername("houda") .setEmail("houda@gmail.com") .setPhoneNumber("0657....") .build(); const premiumUser = User.Builder .setUsername("houda") .setEmail("houda@gmail.com") .setCreditCard("1234....") .build();
class Order { private state: string; private constructor(builder: OrderBuilder) { this.state = builder.state; } public static get Builder() { return new OrderBuilder(); } public getState(): string { return this.state; } } class OrderBuilder { state: string = "Placed"; public prepareOrder(): OrderBuilder { if (this.state === "Placed") { this.state = "Prepared"; } return this; } public deliverOrder(): OrderBuilder { if (this.state === "Prepared") { this.state = "Delivered"; } return this; } public build(): Order { return new Order(this); } } // Usage const completedOrder = Order.Builder .prepareOrder() .deliverOrder() .build(); console.log(completedOrder.getState()); // "Delivered"
class Clothing { type: string; fabric: string; color: string; brand: string; private constructor(builder: ClothingBuilder) { this.type = builder.type; this.fabric = builder.fabric; this.color = builder.color; this.brand = builder.brand; } public static get Builder() { return new ClothingBuilder(); } } class ClothingBuilder { type!: string; fabric!: string; color!: string; brand!: string; public setType(type: string): ClothingBuilder { this.type = type; return this; } public setFabric(fabric: string): ClothingBuilder { this.fabric = fabric; return this; } public setColor(color: string): ClothingBuilder { this.color = color; return this; } public setBrand(brand: string): ClothingBuilder { this.brand = brand; return this; } public build(): Clothing { return new Clothing(this); } } // Usage const tShirt = Clothing.Builder .setType("T-Shirt") .setFabric("Cotton") .setColor("Blue") .setBrand("BrandA") .build(); const pants = Clothing.Builder .setType("Pants") .setFabric("Denim") .setColor("Black") .setBrand("BrandB") .build();
Corak Reka Bentuk Pembina adalah penting untuk beberapa sebab utama, terutamanya apabila ia berkaitan dengan pengurusan kerumitan penciptaan objek. Inilah sebabnya ia sangat berharga:
Apabila objek mempunyai banyak atribut, sesetengah daripadanya mungkin pilihan atau perlu ditetapkan dalam susunan tertentu, Corak Pembina menyediakan cara yang jelas dan berstruktur untuk mencipta objek.
Dengan memisahkan logik penciptaan objek daripada objek itu sendiri, Corak Pembina menjadikan kod lebih mudah dibaca dan lebih mudah diselenggara.
Daripada mempunyai berbilang pembina dengan kombinasi parameter yang berbeza, Corak Pembina menghapuskan keperluan untuk pembina terlebih muatan.
Pembina memisahkan pembinaan objek daripada perwakilannya. Ini bermakna anda boleh menukar cara objek itu dibina tanpa menjejaskan perwakilannya, atau sebaliknya.
Corak Reka Bentuk Pembina ialah alat penting untuk pembangun yang berurusan dengan penciptaan objek yang kompleks. Dengan memecahkan proses pembinaan kepada langkah yang jelas dan boleh diurus, ia meningkatkan kebolehbacaan kod, kebolehselenggaraan dan fleksibiliti. Sama ada anda bekerja dengan objek yang mempunyai banyak atribut, memerlukan pembinaan berbilang langkah atau perlu menyokong berbilang konfigurasi, Corak Pembina menyediakan penyelesaian elegan yang menghalang pembina yang terlalu rumit dan mengurangkan ralat.
Blog yang diliputi:
Atas ialah kandungan terperinci Menguasai Corak Reka Bentuk Pembina: Memudahkan Penciptaan Objek Kompleks. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!