Rumah >hujung hadapan web >tutorial js >Menguasai Corak Reka Bentuk Pembina: Memudahkan Penciptaan Objek Kompleks

Menguasai Corak Reka Bentuk Pembina: Memudahkan Penciptaan Objek Kompleks

DDD
DDDasal
2024-11-12 06:28:02417semak imbas

Mastering the Builder Design Pattern: Simplifying Complex Object Creation

pengenalan

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

  1. Apakah Corak Pembina?
  2. Bilakah anda patut menggunakannya?
  3. Contoh Penggunaan Pembina Dunia Sebenar
  4. Mengapa corak ini sangat penting?
  5. Kesimpulan ## Apakah Corak Pembina? Corak Reka Bentuk Pembina ialah corak reka bentuk ciptaan yang membolehkan pembinaan objek kompleks terkawal dan fleksibel. Daripada mempunyai pembina yang mengambil sejumlah besar parameter, pembina menyediakan antara muka yang lancar untuk mencipta objek langkah demi langkah. Ia berguna apabila objek mempunyai banyak atribut, langkah pembinaan khusus atau berbilang konfigurasi yang mungkin.

Bilakah anda patut menggunakannya?

Corak Reka Bentuk Pembina amat berguna dalam kes berikut:

  1. 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.

  2. 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.

  3. 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.

Contoh Penggunaan Pembina Dunia Sebenar

untuk setiap kes yang telah kita lihat dalam bahagian sebelum kita akan melihat pelaksanaan pembina

  1. Jika objek mempunyai banyak atribut, beberapa daripadanya adalah pilihan:
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();

  1. Objek dengan proses penciptaan berbilang langkah:
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"

  1. Menyokong berbilang perwakilan objek yang sama:
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();

Mengapa corak ini sangat penting?

Corak Reka Bentuk Pembina adalah penting untuk beberapa sebab utama, terutamanya apabila ia berkaitan dengan pengurusan kerumitan penciptaan objek. Inilah sebabnya ia sangat berharga:

  1. Mengendalikan Objek Kompleks

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.

  1. Meningkatkan Kebolehbacaan dan Kebolehselenggaraan Kod

Dengan memisahkan logik penciptaan objek daripada objek itu sendiri, Corak Pembina menjadikan kod lebih mudah dibaca dan lebih mudah diselenggara.

  1. Mengurangkan Lebihan Pembina

Daripada mempunyai berbilang pembina dengan kombinasi parameter yang berbeza, Corak Pembina menghapuskan keperluan untuk pembina terlebih muatan.

  1. Pemisahan Kebimbangan yang Jelas

Pembina memisahkan pembinaan objek daripada perwakilannya. Ini bermakna anda boleh menukar cara objek itu dibina tanpa menjejaskan perwakilannya, atau sebaliknya.

Kesimpulan

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:

  1. Apakah Corak Pembina?
  2. Bilakah anda patut menggunakannya?
  3. Contoh Penggunaan Pembina Dunia Sebenar
  4. Mengapa corak ini sangat penting?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn