🏗ïļ Builder Pattern

āđāļ™āļ§āļ„āļīāļ”āđƒāļ™āļāļēāļĢāļĢāļąāļšāļĄāļ·āļ­āļāļąāļš object āļ—āļĩāđˆāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ‹āļąāļšāļ‹āđ‰āļ­āļ™

āđ€āļˆāđ‰āļēāļ•āļąāļ§āļ™āļĩāđ‰āļœāļĄāļ‚āļ­āļ•āļąāđ‰āļ‡āļŠāļ·āđˆāļ­āđ€āļ›āđ‡āļ™āļ āļēāļĐāļēāđ„āļ—āļĒāļ§āđˆāļē āļœāļđāđ‰āļŠāļĢāđ‰āļēāļ‡ āđāļĨāļ°āļĄāļąāļ™āļ­āļĒāļđāđˆāđƒāļ™āļāļĨāļļāđˆāļĄāļ‚āļ­āļ‡ ðŸĪ° Creational Patterns āļ‹āļķāđˆāļ‡āđ€āļˆāđ‰āļēāļ•āļąāļ§āļ™āļĩāđ‰āļˆāļ°āļĄāļēāļŠāđˆāļ§āļĒāđāļāđ‰āļ›āļąāļāļŦāļēāđ€āļĄāļ·āđˆāļ­ āđ€āļĢāļēāļĄāļĩāļ„āļĨāļēāļŠāļ—āļĩāđˆāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ‹āļąāļšāļ‹āđ‰āļ­āļ™ āđāļĨāļ° āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ object āļŦāļĨāļēāļĒāđ†āļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ„āļĨāđ‰āļēāļĒāđ†āļāļąāļ™ (āļ­āļĒāđˆāļēāļžāļķāđˆāļ‡āđ€āļŠāļĩāļĒāđ€āļ§āļĨāļēāļ­āđˆāļēāļ™āļ•āļąāļ§āļŦāļ™āļēāļžāļ§āļāļ™āļąāđ‰āļ™āđ€āļĨāļĒ) āđ„āļ›āļ”āļđāđ‚āļˆāļ—āļĒāđŒāļ‚āļ­āļ‡āđ€āļĢāļēāļāļąāļ™āđ€āļĨāļĒāļ”āļĩāļāļ§āđˆāļēāļˆāļ°āđ„āļ”āđ‰āđ€āļ‚āđ‰āļēāđƒāļˆāđ„āļ”āđ‰āđ€āļĢāđ‡āļ§āļ‚āļķāđ‰āļ™

āđāļ™āļ°āļ™āļģāđƒāļŦāđ‰āļ­āđˆāļēāļ™ āļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰āđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļŦāļ™āļķāđˆāļ‡āļ‚āļ­āļ‡āļĄāļŦāļēāļāļēāļžāļĒāđŒ Design Patterns āļ—āļĩāđˆāļˆāļ°āļĄāļēāđ€āļ›āđ‡āļ™ guideline āđƒāļ™āļāļēāļĢāđāļāđ‰āļ›āļąāļāļŦāļēāđƒāļ™āļāļēāļĢāļ­āļ­āļāđāļšāļšāļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒāđ‚āļ›āļĢāđ€āļˆāļ„ āļŦāļēāļāđƒāļ„āļĢāļŠāļ™āđƒāļˆāļ­āļĒāļēāļāđ€āļ‚āđ‰āļēāđƒāļˆāļ•āļąāđ‰āļ‡āđāļ•āđˆāļ•āđ‰āļ™āļ§āđˆāļēāļĄāļąāļ™āļ„āļ·āļ­āļ­āļ°āđ„āļĢ āđāļĨāļ°āđ€āļˆāđ‰āļē patterns āļ—āļąāđ‰āļ‡ 23 āļ•āļąāļ§āļĄāļĩāļ­āļ°āđ„āļĢāļšāđ‰āļēāļ‡ āļāđ‡āļŠāļēāļĄāļēāļĢāļ–āļˆāļīāđ‰āļĄāļ•āļĢāļ‡āļ™āļĩāđ‰āđ€āļžāļ·āđˆāļ­āđ„āļ›āļ­āđˆāļēāļ™āļšāļ—āļ„āļ§āļēāļĄāļŦāļĨāļąāļāđ„āļ”āđ‰āđ€āļšāļĒāļ„āļĢāļąāļŠ ðŸ‘Ķ Design Patterns

🧐 āđ‚āļˆāļ—āļĒāđŒ

āļŠāļĄāļĄāļļāļ•āļīāļ§āđˆāļēāđ€āļāļĄāļ‚āļ­āļ‡āđ€āļĢāļēāļĄāļĩ āļĢāļ°āļšāļšāļŠāļĢāđ‰āļēāļ‡āļ­āļēāļ§āļļāļ˜ āđ‚āļ”āļĒāļ­āļēāļ§āļļāļ˜āļ—āļĩāđˆāļŠāļĢāđ‰āļēāļ‡āļ­āļ­āļāļĄāļēāļ™āļąāđ‰āļ™āļĄāļĩ 2 āļ›āļĢāļ°āđ€āļ āļ—āļ„āļ·āļ­

  • āļ­āļēāļ§āļļāļ˜āļ˜āļĢāļĢāļĄāļ”āļē - āļ­āļēāļ§āļļāļ˜āļ›āļĢāļ°āđ€āļ āļ—āļ™āļĩāđ‰āļˆāļ° āļĄāļĩāļŠāđˆāļ­āļ‡āļ§āđˆāļēāļ‡ 2 āļŠāđˆāļ­āļ‡ āđƒāļŦāđ‰āđƒāļŠāđˆāļāļēāļĢāđŒāļ”āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļŦāđ‰āļāļąāļšāļ­āļēāļ§āļļāļ˜āđ„āļ”āđ‰

  • āļ­āļēāļ§āļļāļ˜āļ˜āļēāļ•āļļ- āļ­āļēāļ§āļļāļ˜āļ›āļĢāļ°āđ€āļ āļ—āļ™āļĩāđ‰āļˆāļ° āđ€āļĨāļ·āļ­āļāļ˜āļēāļ•āļļāđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ āļ”āļīāļ™ āļ™āđ‰āļģ āļĨāļĄ āđ„āļŸ

  • āļ­āļēāļ§āļļāļ˜āļ˜āļĢāļĢāļĄāļ”āļē - āļˆāļ°āļ•āđ‰āļ­āļ‡āđ„āļĄāđˆāļĄāļĩāļ˜āļēāļ•āļļ

  • āļ­āļēāļ§āļļāļ˜āļ˜āļēāļ•āļļ- āļˆāļ°āļ•āđ‰āļ­āļ‡āđ„āļĄāđˆāļĄāļĩāļŠāđˆāļ­āļ‡āļ§āđˆāļēāļ‡āļŠāļģāļŦāļĢāļąāļšāđƒāļŠāđˆāļāļēāļĢāđŒāļ”

āđāļĨāļ°āļ­āļēāļ§āļļāļ˜āļ—āļĩāđˆāļ–āļđāļāļŠāļĢāđ‰āļēāļ‡āļ‚āļķāđ‰āļ™āļĄāļēāļ™āļąāđ‰āļ™āļˆāļ°āļ•āđ‰āļ­āļ‡āļ–āļđāļ āļŠāļĨāļąāļāļŠāļ·āđˆāļ­āļ„āļ™āļŠāļĢāđ‰āļēāļ‡ āđ€āļ­āļēāđ„āļ§āđ‰āđƒāļ™āļ•āļąāļ§āļ­āļēāļ§āļļāļ˜āļ”āđ‰āļ§āļĒ āļ•āļēāļĄāļĢāļđāļ›āļ”āđ‰āļēāļ™āļĨāđˆāļēāļ‡āđ€āļšāļĒ

āļ™āļ­āļāļˆāļēāļāļ™āļĩāđ‰āļĒāļąāļ‡āļĄāļĩāđ€āļĢāļ·āđˆāļ­āļ‡āļ‚āļ­āļ‡ āļ›āļĢāļ°āđ€āļ āļ—āļ­āļēāļ§āļļāļ˜ āļ”āđ‰āļ§āļĒ āļ‹āļķāđˆāļ‡āļ­āļēāļ§āļļāļ˜āđāļ•āđˆāļĨāļ°āļ›āļĢāļ°āđ€āļ āļ—āļāđ‡āļˆāļ°āļĄāļĩāļĨāļąāļāļĐāļ“āļ°āļ—āļĩāđˆāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™ āđ€āļŠāđˆāļ™

  • āļ”āļēāļ› - āđ€āļ›āđ‡āļ™āļāļēāļĢāđ‚āļˆāļĄāļ•āļĩāļ—āļēāļ‡āļāļēāļĒāļ āļēāļž āđāļĨāļ° āđƒāļŠāđ‰āđ„āļ”āđ‰āđƒāļ™āļĢāļ°āļĒāļ°āļ›āļĢāļ°āļŠāļīāļ”āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™

  • āļ„āļ‘āļēāđ€āļ§āļ—āļĄāļ™āļ•āđŒ - āđ€āļ›āđ‡āļ™āļāļēāļĢāđ‚āļˆāļĄāļ•āļĩāļ—āļēāļ‡āđ€āļ§āļ—āļĄāļ™āļ•āđŒ āđāļĨāļ° āđƒāļŠāđ‰āđ„āļ”āđ‰āđƒāļ™āļĢāļ°āļĒāļ°āđƒāļāļĨāđ‰

  • āļ˜āļ™āļđ - āđ€āļ›āđ‡āļ™āļāļēāļĢāđ‚āļˆāļĄāļ•āļĩāļ—āļēāļ‡āļāļēāļĒāļ āļēāļž āđāļĨāļ° āđƒāļŠāđ‰āđ„āļ”āđ‰āđƒāļ™āļĢāļ°āļĒāļ°āđ„āļāļĨ

āđāļĨāļ°āļ­āļĒāđˆāļēāļ‡āļĨāļ·āļĄāļ§āđˆāļēāļ­āļēāļ§āļļāļ˜āļžāļ§āļāļ™āļĩāđ‰āļˆāļ°āļ•āđ‰āļ­āļ‡āļŠāļēāļĄāļēāļĢāļ–āļ–āļđāļāļŠāļĢāđ‰āļēāļ‡āđ‚āļ”āļĒāđƒāļŠāđˆāļ˜āļēāļ•āļļāđ„āļ”āđ‰āļ™āļ° āļĒāļāđ€āļ§āđ‰āļ™āļ­āļēāļ§āļļāļ˜āļžāļ§āļāļ„āļ‘āļēāđ€āļ§āļ—āļĄāļ™āļ•āđŒ āļˆāļ°āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđˆāļ˜āļēāļ•āļļāđ„āļ”āđ‰ āļ•āļēāļĄāļĢāļđāļ›āđ€āļĨāļĒ

āđāļĨāđ‰āļ§āđ€āļĢāļēāļˆāļ°āđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ”āļ­āļ­āļāļĄāļēāļĒāļąāļ‡āđ„āļ‡āļ”āļĩ āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļĄāļąāļ™āļŠāļēāļĄāļēāļĢāļ–āļ•āļ­āļšāđ‚āļˆāļ—āļĒāđŒāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāđāļšāļšāļ™āļĩāđ‰ āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĄāđˆāļĄāļĩāļ›āļąāļāļŦāļēāļāļąāļ™āļ™āļ° ?

🧒 āđāļāđ‰āđ‚āļˆāļ—āļĒāđŒāļ„āļĢāļąāđ‰āļ‡āļ—āļĩāđˆ 1

āļˆāļēāļāđ‚āļˆāļ—āļĒāđŒāļ—āļĩāđˆāđ„āļ”āđ‰āļĄāļēāđ€āļĢāļēāļāđ‡āļ­āļ­āļāđāļšāļš āļ„āļĨāļēāļŠāļ­āļēāļ§āļļāļ˜ āļ‚āļ­āļ‡āđ€āļĢāļēāļāļąāļ™āđ„āļ”āđ‰āļ›āļĢāļ°āļĄāļēāļ“āļ™āļĩāđ‰

āļŠāļļāļ”āļ—āđ‰āļēāļĒāđ€āļĢāļēāļāđ‡āđ„āļ›āđ€āļ‚āļĩāļĒāļ™āđ€āļĄāļ˜āļ­āļ”āļ—āļĩāđˆāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ­āļēāļ§āļļāļ˜āļ­āļ­āļāļĄāļē āđ‚āļ”āļĒāļāļēāļĢāđ‚āļĒāļ™ parameters āļ•āđˆāļēāļ‡āđ†āđ€āļžāļ·āđˆāļ­āđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ­āļēāļ§āļļāļ˜ āļžāļĢāđ‰āļ­āļĄāļāļąāļšāđ€āļ‚āļĩāļĒāļ™āđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āļ•āđˆāļēāļ‡āđ†āļĨāļ‡āđ„āļ› āđ€āļŠāđˆāļ™ āļ–āđ‰āļēāđ€āļ›āđ‡āļ™āļ­āļēāļ§āļļāļ˜āļ˜āļēāļ•āļļāļˆāļ°āļ•āđ‰āļ­āļ‡āđ„āļĄāđˆāļĄāļĩāļŠāđˆāļ­āļ‡āđƒāļŠāđˆāļāļēāļĢāđŒāļ” āļšāļĨāļēāđ† āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļāđ‡āļˆāļ°āđ„āļ”āđ‰āđ€āļĄāļ˜āļ­āļ”āļ­āļ­āļāļĄāļēāļŦāļ™āđ‰āļēāļ•āļēāļ›āļĢāļ°āļĄāļēāļ“āļ™āļĩāđ‰

āļŦāļēāļāļ”āļđāđ‚āļ„āđ‰āļ”āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ”āđ‰āļēāļ™āļĨāđˆāļēāļ‡āđ„āļĄāđˆāļĢāļđāđ‰āđ€āļĢāļ·āđˆāļ­āļ‡ āđƒāļŦāđ‰āļāļ”āļ—āļĩāđˆ tab āļ‚āđ‰āļēāļ‡āđ†āļ—āļĩāđˆāļŠāļ·āđˆāļ­āļ§āđˆāļē āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆ 2 (āđāļšāļšāļ‡āđˆāļēāļĒ) āļĨāļ°āļāļąāļ™āļ™āļ°

public Weapon CreateNewWeapon(string name, 
    string element, 
    string creatorName, 
    bool isPhysical, 
    string type,
    int range)
{
    const int DefaultAttack = 10;
    const int NoneElementSlots = 2;
    var isElementWeapon = !string.IsNullOrWhiteSpace(element);
    var weapon = new Weapon
    {
        Name = name,
        CreatorName = creatorName,
        Element = isElementWeapon ? element : string.Empty,
        MaximumSlots = isElementWeapon ? 0 : NoneElementSlots,
        PhysicalAttack = isPhysical ? DefaultAttack : 0,
        MagicalAttack = isPhysical ? 0 : DefaultAttack,
        WeaponType = type,
        MinimumAttackRange = range,
    };
    var isStaff = type == "staff";
    weapon.Element = isStaff ? string.Empty : weapon.Element;
    weapon.MaximumSlots = isStaff ? NoneElementSlots : weapon.MaximumSlots;
    return weapon;
}

āļ‹āļķāđˆāļ‡āļˆāļēāļāđ‚āļ„āđ‰āļ”āļ”āđ‰āļēāļ™āļšāļ™āļāđ‡āđ„āļĄāđˆāđ„āļ”āđ‰āļ—āļģāļ­āļ°āđ„āļĢāļœāļīāļ”āļ™āļ° āđāļāđ‰āđ‚āļˆāļ—āļĒāđŒāļ—āļĩāđˆāļ‚āļ­āļ‡āđ€āļĢāļēāđ„āļ”āđ‰āļ•āļēāļĄāļ›āļĢāļāļ•āļīāđ€āļĨāļĒ āđāļ•āđˆāļĄāļąāļ™āļˆāļ°āđ€āļāļīāļ”āļ­āļ°āđ„āļĢāļ‚āļķāđ‰āļ™āļ–āđ‰āļē āļ›āļĢāļ°āđ€āļ āļ—āļ‚āļ­āļ‡āļ­āļēāļ§āļļāļ˜āļĄāļĩāđ€āļžāļīāđˆāļĄāļ‚āļķāđ‰āļ™āđ€āļĢāļ·āđˆāļ­āļĒāđ† ... āđ€āļĢāļēāļāđ‡āļ•āđ‰āļ­āļ‡āđ„āļ›āđ„āļĨāđˆāđāļāđ‰āđ‚āļ„āđ‰āļ”āđƒāļŦāļĄāđˆāļ—āļļāļāļ„āļĢāļąāđ‰āļ‡āļ­āļ°āļ”āļī āđāļ–āļĄāļĒāļīāđˆāļ‡āđāļāđ‰āļĒāļīāđˆāļ‡āļžāļąāļ™āļāļąāļ™āđ€āļ›āđ‡āļ™āļŠāļ›āļēāđ€āļāđ‡āļ•āļ•āļĩāđ‰āļ‚āļķāđ‰āļ™āđ„āļ›āđ€āļĢāļ·āđˆāļ­āļĒ ðŸ˜Ļ

āđ€āļžāļĢāļēāļ°āđ‚āļ„āđ‰āļ”āļ‚āļ­āļ‡āđ€āļĢāļēāļĄāļąāļ™āļĄāļĩāļŦāļĨāļēāļĒāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāđ„āļĄāđˆāļ•āļĢāļ‡āļŦāļĨāļąāļāđƒāļ™āļāļēāļĢāļ­āļ­āļāđāļšāļšāļ—āļĩāđˆāļ”āļĩ āđ€āļŠāđˆāļ™ SRP, OCP āļĒāļąāļ‡āđ„āļ‡āļĨāđˆāļ°

āļ­āļēāļ§āļĨāđˆāļ°āđ€āļĄāļ·āđˆāļ­āļĄāļēāļ–āļķāļ‡āļ•āļĢāļ‡āļ™āļĩāđ‰ āļœāļĄāļ‚āļ­āđāļ›āļĨāļ‡āđ‚āļ„āđ‰āļ”āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ‚āļ­āļ‡āđ€āļĢāļēāđƒāļŦāđ‰āđ„āļ›āđ€āļ›āđ‡āļ™āļ āļēāļžāļ›āļĢāļ°āļĄāļēāļ“āļ™āļĩāđ‰āļĨāļ°āļāļąāļ™āļˆāļ°āđ„āļ”āđ‰āđ€āļ‚āđ‰āļēāđƒāļˆāļāļąāļ™āđ„āļ”āđ‰āļ‡āđˆāļēāļĒāđ† āđāļĨāđ‰āļ§āđ€āļ”āļĩāđ‹āļĒāļ§āđ€āļĢāļēāļĨāļ­āļ‡āđ„āļ›āļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļ›āļąāļāļŦāļē āđāļĨāđ‰āļ§āļ„āđˆāļ­āļĒāđ†āđāļāđ‰āļ›āļąāļāļŦāļēāļāļąāļ™āļ—āļĩāļĨāļ°āļˆāļļāļ”āļāļąāļ™āļ”āļĩāļāļ§āđˆāļē

🧒 āđāļāđ‰āđ‚āļˆāļ—āļĒāđŒāļ„āļĢāļąāđ‰āļ‡āļ—āļĩāđˆ 2

ðŸ”Ĩ āļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļ›āļąāļāļŦāļē

āļˆāļēāļāļ›āļąāļāļŦāļēāļ—āļĩāđˆāļ§āđˆāļēāļĄāļēāđ€āļĢāļēāļˆāļ°āļžāļšāļ§āđˆāļē āļ—āļļāļāļ„āļĢāļąāđ‰āļ‡āļ—āļĩāđˆāļĄāļĩāļ­āļēāļ§āļļāļ˜āļ›āļĢāļ°āđ€āļ āļ—āđƒāļŦāļĄāđˆāđ† āļŦāļĢāļ·āļ­ āđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āđƒāļŦāļĄāđˆāđ† āđ€āļ‚āđ‰āļēāļĄāļēāļĄāļąāļ™āļˆāļ°āļ—āļģāđƒāļŦāđ‰ āđ€āļĢāļēāļ•āđ‰āļ­āļ‡āđ„āļ›āđāļāđ‰āđ€āļˆāđ‰āļēāđ€āļĄāļ˜āļ­āļ” CreateNewWeapon āđ€āļŠāļĄāļ­ āđ€āļĨāļĒāļ—āļģāđƒāļŦāđ‰āđƒāļ™āļ­āļ™āļēāļ„āļ•āļĄāļąāļ™āļˆāļ° āļšāļ§āļĄāļ‰āđˆāļģ āļ­āļĒāđˆāļēāļ‡āđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļŠāļ‡āļŠāļąāļĒāđ€āļĨāļĒ āđ€āļžāļĢāļēāļ°āđāļ„āđˆāļ”āļđāļˆāļēāļāļĢāļđāļ›āļāđ‡āđ€āļŦāđ‡āļ™āđāļĨāđ‰āļ§āļ§āđˆāļēāļĄāļąāļ™āļĢāļąāļš parameters āļĒāļąāđ‰āļ§āđ€āļĒāļĩāđŠāļĒāđ„āļ›āļŦāļĄāļ” āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āļ āļēāļĒāđƒāļ™āļāđ‡āļ™āđˆāļēāļˆāļ°āđ€āļĒāļ­āļ°āđ„āļĄāđˆāđāļžāđ‰āļāļąāļ™ āđ€āļĄāļ·āđˆāļ­āļĄāļĩāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđāļāđ‰āđ„āļ‚āđ€āļāļīāļ”āļ‚āļķāđ‰āļ™ āļĄāļąāļ™āļāđ‡āļˆāļ°āļ™āļģāļ›āļąāļāļŦāļēāļĄāļēāļŦāļēāđ€āļĢāļēāļĒāļąāļ‡āđ„āļ‡āļĨāđˆāļ° āđ€āļĢāļēāđ€āļĢāļĩāļĒāļāļāļēāļĢāļšāļ§āļĄāđāļšāļšāļ™āļĩāđ‰āļ§āđˆāļē āļšāļ§āļĄāļ­āļ­āļāļ‚āđ‰āļēāļ‡

āļšāļ§āļĄāļ­āļ­āļāļ‚āđ‰āļēāļ‡

āļŦāļĢāļ·āļ­āļ•āđˆāļ­āđƒāļŦāđ‰āđ€āļĢāļēāđ€āļ­āļē Parameters āļ—āļąāđ‰āļ‡āļŦāļĨāļēāļĒāđ„āļ›āļĒāļąāļ”āļĢāļ§āļĄāđ„āļ§āđ‰āļ āļēāļĒāđƒāļ™āļ„āļĨāļēāļŠāđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļāđ‡āļ•āļēāļĄ āļĄāļąāļ™āļāđ‡āļˆāļ°āđ€āļ›āđ‡āļ™āļāļēāļĢāļĒāđ‰āļēāļĒāļ—āļĩāđˆāļšāļ§āļĄāđ„āļ›āļ­āļĒāļđāđˆāļ—āļĩāđˆāđ€āļˆāđ‰āļēāļ„āļĨāļēāļŠāđƒāļŦāļĄāđˆāļ™āļąāđˆāļ™āđ€āļ­āļ‡

āļĒāđ‰āļēāļĒāļ—āļĩāđˆāļšāļ§āļĄ

āđāļĨāļ°āļ•āđˆāļ­āđƒāļŦāđ‰āđ€āļĢāļēāđāļĒāļāđ€āļĄāļ˜āļ­āļ”āđ€āļžāļ·āđˆāļ­āđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ­āļēāļ§āļļāļ˜āļĄāļąāļ™āļāđ‡āļĒāļąāļ‡āļˆāļ°āļšāļ§āļĄāļ­āļ­āļāđ€āļŦāļĄāļ·āļ­āļ™āđ€āļ”āļīāļĄāđāļ•āđˆāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđ€āļ›āđ‡āļ™ āļšāļ§āļĄāđƒāļ™āđāļ™āļ§āļ”āļīāđˆāļ‡āđāļ—āļ™

āļšāļ§āļĄāđāļ™āļ§āļ”āļīāđˆāļ‡

āļŠāđˆāļ§āļ™āļŦāļ™āļķāđˆāļ‡āđƒāļ™āļŠāļēāđ€āļŦāļ•āļļāļāļēāļĢāļšāļ§āļĄāļ™āļąāđ‰āļ™āđ€āļāļīāļ”āļˆāļēāļ āļĄāļąāļ™āļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļŦāļĨāļēāļĒāđ€āļĢāļ·āđˆāļ­āļ‡ āļĒāļąāļ‡āđ„āļ‡āļĨāđˆāļ° āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļ”āļĩāđ‹āļĒāļ§āđ€āļĢāļēāļĄāļēāđāļāđ‰āļ›āļąāļāļŦāļēāđ€āļĢāļ·āđˆāļ­āļ‡āļ™āļĩāđ‰āļāļąāļ™āļ”āđ‰āļ§āļĒāļŦāļĨāļąāļāđƒāļ™āļāļēāļĢāļ­āļ­āļāđāļšāļšāļ”āđ‰āļ§āļĒ SRP āļāļąāļ™āđ€āļĨāļĒ

ðŸ”Ĩ āđāļāđ‰āđ„āļ‚āļ›āļąāļāļŦāļē

āļˆāļēāļāļ—āļĩāđˆāļ­āļ˜āļīāļšāļēāļĒāđ„āļ›āļ›āļąāļāļŦāļēāļŦāļĨāļąāļāļ‚āļ­āļ‡āđ€āļĢāļēāļ„āļ·āļ­ āļ‚āļ­āļ‡āļŦāļĨāļēāļĒāđ†āļ­āļĒāđˆāļēāļ‡āļĄāļąāļ™āļžāļąāļ™āļāļąāļ™āļ­āļĒāļđāđˆāļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ”āđ€āļ”āļĩāļĒāļ§ āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļˆāļ°āļ•āđ‰āļ­āļ‡āļ„āđˆāļ­āļĒāđ† āđāļāđ‰āļ›āļĄāļĄāļąāļ™āļ—āļĩāļĨāļ°āđ€āļĢāļ·āđˆāļ­āļ‡āļ•āļēāļĄāļ”āđ‰āļēāļ™āļĨāđˆāļēāļ‡āļ™āļĩāđ‰āđ€āļšāļĒ

āļŦāļ™āđ‰āļēāļ—āļĩāđˆāđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ­āļēāļ§āļļāļ˜

āđ€āļĢāļēāđ„āļĄāđˆāļ„āļ§āļĢāļˆāļ°āļĢāļ§āļĄāđ„āļ§āđ‰āđƒāļ™āđ€āļĄāļ˜āļ­āļ”āđ€āļ”āļĩāļĒāļ§ āđāļ•āđˆāļĄāļąāļ™āļ„āļ§āļĢāļˆāļ°āđāļĒāļāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ­āļēāļ§āļļāļ˜āļ­āļ­āļāđ€āļ›āđ‡āļ™āļ­āļēāļ§āļļāļ˜āđāļ•āđˆāļĨāļ°āļ›āļĢāļ°āđ€āļ āļ—āļ™āļąāđˆāļ™āđ€āļ­āļ‡ āđ€āļŠāđˆāļ™ āļ•āļąāļ§āļŠāļĢāđ‰āļēāļ‡āļ”āļēāļ› āļ•āļąāļ§āļŠāļĢāđ‰āļēāļ‡āļ„āļ‘āļēāđ€āļ§āļ—āļĄāļ™āļ•āđŒ āļ•āļąāļ§āļŠāļĢāđ‰āļēāļ‡āļ˜āļ™āļđ āļ•āļēāļĄāļĢāļđāļ›āļ”āđ‰āļēāļ™āļĨāđˆāļēāļ‡

āļˆāļąāļ”āļāļēāļĢāļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļ‚āļ­āļ‡āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡

āļ„āļĢāļēāļ§āļ™āļĩāđ‰āđ€āļˆāđ‰āļēāļžāļ§āļ parameters āļ—āļĩāđˆāļˆāļ°āļ•āđ‰āļ­āļ‡āļŠāđˆāļ‡āđ€āļ‚āđ‰āļēāđ„āļ›āđƒāļŦāđ‰āļāļąāļšāđ€āļĄāļ˜āļ­āļ”āļ™āļąāđ‰āļ™ āļĄāļąāļ™āļ„āđˆāļ­āļ™āļ‚āđ‰āļēāļ‡āļ§āļļāđˆāļ™āļ§āļēāļĒāļĄāļēāļ āđ€āļžāļĢāļēāļ°āļ–āđ‰āļēāđƒāļ™āļ­āļ™āļēāļ„āļ•āļĄāļĩ parameters āļ•āđˆāļēāļ‡āđ†āđ€āļžāļīāđˆāļĄāđ€āļ‚āđ‰āļēāļĄāļēāļ­āļĩāļ āļĄāļąāļ™āļāđ‡āļˆāļ°āļ—āļģāđƒāļŦāđ‰āļĄāļąāļ™āļšāļ§āļĄāļ­āļĒāđˆāļēāļ‡āđ€āļĨāļĩāđˆāļĒāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āļ™āļąāđˆāļ™āđ€āļ­āļ‡ āđāļĨāļ° āļšāļēāļ‡āļ—āļĩ parameter āļ—āļĩāđˆāđ€āļžāļīāđˆāļĄāđ€āļ‚āđ‰āļēāļĄāļēāđƒāļŦāļĄāđˆ āļĄāļąāļ™āļāđ‡āļ­āļēāļˆāļˆāļ°āđ„āļĄāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāļąāļšāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ‚āļ­āļ‡āđāļšāļšāđ€āļ”āļīāļĄāđ€āļĨāļĒāļ”āđ‰āļ§āļĒāļ‹āđ‰āļģ āđāļ•āđˆāđ€āļĢāļēāļāđ‡āļ•āđ‰āļ­āļ‡āļŠāđˆāļ‡āđ€āļ‚āđ‰āļēāđ„āļ› āđ€āļžāļĢāļēāļ°āđ„āļĄāđˆāļ­āļĒāđˆāļēāļ‡āļ™āļąāđ‰āļ™āļ‚āļ­āļ‡āđ€āļ”āļīāļĄāļˆāļ°āļ—āļģāļ‡āļēāļ™āđ„āļĄāđˆāđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ āļĄāļĩāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āđ€āļžāļīāđˆāļĄāļ§āđˆāļēāļ”āļēāļ›āļ˜āļēāļ•āļļāļ™āļąāđ‰āļ™āļ–āđ‰āļēāļ–āļđāļāļŠāļĢāđ‰āļēāļ‡āļ•āļ­āļ™āđ€āļ—āļĩāđˆāļĒāļ‡āļ„āļ·āļ™āļĄāļąāļ™āļˆāļ°āđ€āļžāļīāđˆāļĄāļžāļĨāļąāļ‡āđ‚āļˆāļĄāļ•āļĩ x 2 āđ„āļĢāļ‡āļĩāđ‰ āđ‚āļ„āđ‰āļ”āđ€āļĢāļēāļāđ‡āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āļ™āļĩāđ‰

public Weapon CreateWeapon(string name,
    string element,
    string creatorName,
    bool isPhysical,
    string type,
    int range,
    DateTime? currentTime)
{ ... }

āļ‹āļķāđˆāļ‡āđ€āļˆāđ‰āļēāđ‚āļ„āđ‰āļ”āļ”āđ‰āļēāļ™āļšāļ™āļĄāļąāļ™āļˆāļ°āļšāļąāļ‡āļ„āļąāļšāđƒāļŦāđ‰āđ€āļĢāļēāđƒāļŠāđˆāđ€āļ§āļĨāļēāļĨāļ‡āđ„āļ›āđ€āļŠāļĄāļ­ āđāļĄāđ‰āļ§āđˆāļēāļˆāļ°āđ€āļ›āđ‡āļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ”āļēāļ›āļ˜āļĢāļĢāļĄāļ”āļēāļāđ‡āļ•āļēāļĄ āđ€āļĨāļĒāļ—āļģāđƒāļŦāđ‰āđ‚āļ„āđ‰āļ”āļ•āļ­āļ™āđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ€āļĄāļ˜āļ­āļ”āļ™āļĩāđ‰āļĄāļąāļ™āļˆāļ°āļ”āļđāļ•āļĨāļ āļ–āđ‰āļēāļĄāļĩāļ‚āļ­āļ‡āļžāļ§āļāļ™āļĩāđ‰āļ­āļĒāļđāđˆāđ€āļĒāļ­āļ°āđ†āļ™āļąāđˆāļ™āđ€āļ­āļ‡ āļ•āļēāļĄāđ‚āļ„āđ‰āļ”āļ”āđ‰āļēāļ™āļĨāđˆāļēāļ‡āļ™āļąāđˆāļ™āđ€āļ­āļ‡

var weapon = CreateWeapon("a", "", true, "sword", 1, null);

āļ‹āļķāđˆāļ‡āļ›āļąāļāļŦāļēāđ€āļĢāļ·āđˆāļ­āļ‡āļ™āļĩāđ‰āļĄāļąāļ™āđ€āļāļīāļ”āļˆāļēāļ āđ€āļĢāļēāļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļļāļāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāļąāļšāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ­āļēāļ§āļļāļ˜āđ„āļ›āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ āļēāļĒāđƒāļ™āļ„āļĢāļąāđ‰āļ‡āđ€āļ”āļĩāļĒāļ§ āļ™āļąāđˆāļ™āđ€āļ­āļ‡ āđāļ•āđˆāļ–āđ‰āļēāđ€āļĢāļēāļĄāļ­āļ‡āļĄāļąāļ™āđƒāļ™āļĄāļļāļĄāļ‚āļ­āļ‡āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļŠāļīāđˆāļ‡āļ‚āļ­āļ‡ āđ€āļĢāļēāļāđ‡āļˆāļ°āļžāļšāļ§āđˆāļē āđ€āļĢāļēāļˆāļ°āļāļģāļŦāļ™āļ”āļ„āđˆāļēāļ•āđˆāļēāļ‡āđ†āđƒāļŦāđ‰āļ•āļ­āļ™āļ—āļĩāđˆāļĄāļąāļ™āļˆāļģāđ€āļ›āđ‡āļ™āļˆāļĢāļīāļ‡āđ†āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ āđ„āļĄāđˆāđƒāļŠāđˆāđ‚āļĒāļ™āđ€āļ‚āđ‰āļēāđ„āļ›āļŦāļĄāļ”āļ āļēāļĒāđƒāļ™āļ„āļĢāļąāđ‰āļ‡āđ€āļ”āļĩāļĒāļ§ āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļˆāļ°āđāļĒāļāļ‚āļ­āļ‡āļ•āđˆāļēāļ‡āđ†āļ­āļ­āļāļĄāļēāđƒāļŦāđ‰āļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢāļ•āđˆāļ­āđ€āļ•āļīāļĄāđ€āļ›āđ‡āļ™ āđ€āļĄāļ˜āļ­āļ”āļĒāđˆāļ­āļĒāđ† āđ€āļŠāđˆāļ™ āđ€āļĄāļ˜āļ­āļ”āļāļģāļŦāļ™āļ”āļŠāļ·āđˆāļ­, āđ€āļĄāļ˜āļ­āļ”āļāļģāļŦāļ™āļ”āļĢāļ°āļĒāļ°āļāļēāļĢāđ‚āļˆāļĄāļ•āļĩ āļšāļĨāļēāđ† āļ•āļēāļĄāļĢāļđāļ›āļ”āđ‰āļēāļ™āļĨāđˆāļēāļ‡

āļ‚āļ­āļ—āļģāđāļ„āđˆāļ”āļēāļ›āđƒāļŦāđ‰āļ”āļđāļ­āļąāļ™āđ€āļ”āļĩāļĒāļ§āļ™āļ° āđ„āļĄāđˆāļ‡āļąāđ‰āļ™āļĢāļđāļ›āļˆāļ°āļĢāļāļĄāļēāļ

āļ‹āļķāđˆāļ‡āļˆāļēāļāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āđƒāļŦāļĄāđˆāļ”āđ‰āļēāļ™āļšāļ™ āđ€āļĄāļ·āđˆāļ­āđ€āļĢāļēāļ­āļĒāļēāļāļˆāļ°āļāļģāļŦāļ™āļ”āļ­āļ°āđ„āļĢāđ€āļĢāļēāļāđ‡āđāļ„āđˆāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ€āļĄāļ˜āļ­āļ”āļžāļ§āļāļ™āļąāđ‰āļ™āđƒāļ™āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāļ•āđˆāļēāļ‡āđ†āļāđ‡āļžāļ­ āđ€āļŠāđˆāļ™ āļ­āļĒāļēāļāļŠāļĢāđ‰āļēāļ‡āļ”āļēāļ›āļ˜āļēāļ•āļļāđ„āļŸ āļāđ‡āļˆāļ°āđ€āļ‚āļĩāļĒāļ™āļ­āļ­āļāļĄāļēāļĢāļēāļ§āđ†āļ™āļĩāđ‰

var swordMaker = new SwordMaker();
swordMaker.SetName("Katana");
swordMaker.SetElement("Fire");
swordMaker.SetCreatorName("Saladpuk");
swordMaker.SetAttackType(true);
swordMaker.SetType("Sword");
swordMaker.SetAttackRange(1);

āļˆāļēāļāđ‚āļ„āđ‰āļ”āļ”āđ‰āļēāļ™āļšāļ™āļˆāļ°āđ€āļŦāđ‡āļ™āļ§āđˆāļēāļˆāļ°āđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄāļ­āļ°āđ„āļĢāļ‹āļąāļāļ—āļĩ āļĄāļąāļ™āļˆāļ°āđ€āļ‚āļĩāļĒāļ™āļ„āđˆāļ­āļ™āļ‚āđ‰āļēāļ‡āļĒāļēāļ§ āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāđ€āļĨāļĒāđāļāđ‰āđ„āļ‚āđƒāļŦāđ‰āļĄāļąāļ™āļŠāļēāļĄāļēāļĢāļ– āđ€āļŠāļ·āđˆāļ­āļĄāļ„āļģāļŠāļąāđˆāļ‡ (Chain) āļāļąāļ™āđ„āļ”āđ‰āļ™āļąāđˆāļ™āđ€āļ­āļ‡ āđ‚āļ”āļĒāļāļēāļĢāđāļāđ‰ return type āđƒāļŦāđ‰āļĄāļąāļ™āļŠāđˆāļ‡ object āļ•āļąāļ§āļĄāļąāļ™āđ€āļ­āļ‡āļāļĨāļąāļšāļĄāļē āļ•āļēāļĄāļĢāļđāļ›āđ€āļĢāļĒ

āļ•āļąāļ§āļ—āļĩāđˆāļ‚āļĩāļ”āđ€āļŠāđ‰āļ™āđƒāļ•āđ‰āļŠāļĩāđāļ”āļ‡āļ„āļ·āļ­āļŠāļīāđˆāļ‡āļ—āļĩāđˆāđāļāđ‰āđ„āļ‚āđ„āļ›āļ™āļ°

āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ‚āļ„āđ‰āļ”āđ€āļ§āļĨāļēāļ—āļĩāđˆāđ€āļĢāļēāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļĄāļąāļ™āļāđ‡āļˆāļ°āđ€āļ›āđ‡āļ™āđāļšāļšāļ™āļĩāđ‰

var swordMaker = new SwordMaker();
swordMaker
    .SetName("Katana")
    .SetElement("Fire")
    .SetCreatorName("Saladpuk")
    .SetAttackType(true)
    .SetType("Sword")
    .SetAttackRange(1);

āļ‹āļķāđˆāļ‡āđ€āļˆāđ‰āļēāļ„āļĨāļēāļŠāļ•āļĢāļ°āļāļđāļĨ Maker āļˆāļ°āļ•āđ‰āļ­āļ‡āļ—āļģāļŦāļ™āđ‰āļēāļ—āļĩāđˆāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ­āļēāļ§āļļāļ˜āđƒāļŦāđ‰āđ€āļĢāļēāļ™āļąāđˆāļ™āđ€āļ­āļ‡ āđāļĨāļ°āļ‚āļ­āļ‡āļšāļēāļ‡āļ­āļĒāđˆāļēāļ‡āđ€āļĢāļēāļāđ‡āļ­āļēāļˆāļˆāļ°āđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļāļģāļŦāļ™āļ”āļ„āđˆāļēāđƒāļŦāđ‰āļĄāļąāļ™āļāđ‡āđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ SwordMaker āļāđ‡āļˆāļ°āļĢāļđāđ‰āļ§āđˆāļēāļ•āļąāļ§āđ€āļ­āļ‡āļ™āļąāđ‰āļ™āļˆāļ°āļ•āđ‰āļ­āļ‡āļāļģāļŦāļ™āļ”āļžāļ§āļ āļĢāļđāļ›āđāļšāļšāļāļēāļĢāđ‚āļˆāļĄāļ•āļĩ āļ›āļĢāļ°āđ€āļ āļ—āļ‚āļ­āļ‡āļ­āļēāļ§āļļāļ˜ āđāļĨāļ° āļĢāļ°āļĒāļ°āļāļēāļĢāđ‚āļˆāļĄāļ•āļĩāđ€āļ›āđ‡āļ™āđ€āļ—āđˆāļēāđ„āļŦāļĢāđˆāļ™āļąāđˆāļ™āđ€āļ­āļ‡ āđāļĨāļ° āļĄāļąāļ™āļāđ‡āļ„āļ§āļĢāļˆāļ°āļĄāļĩāđ€āļĄāļ˜āļ­āļ”āļ—āļĩāđˆāļŠāļąāđˆāļ‡āđƒāļŦāđ‰āļĄāļąāļ™āļŠāļĢāđ‰āļēāļ‡āļ­āļēāļ§āļļāļ˜āļ­āļ­āļāļĄāļēāđƒāļŦāđ‰āđ€āļĢāļēāđ„āļ”āđ‰āļ”āđ‰āļ§āļĒāļ™āļąāđˆāļ™āđ€āļ­āļ‡ āļ•āļēāļĄāļ™āļĩāđ‰āđ€āļšāļĒ

āļŠāđˆāļ§āļ™āđ‚āļ„āđ‰āļ”āļ•āļ­āļ™āļ—āļĩāđˆāđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāļˆāļ°āļŠāļĢāđ‰āļēāļ‡āļ”āļēāļ›āļ˜āļēāļ•āļļāđ„āļŸāļāđ‡āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļ›āđ‡āļ™āđāļšāļšāļ™āļĩāđ‰

var fireSword = new SwordMaker()
    .SetName("Katana")
    .SetElement("Fire")
    .SetCreatorName("Saladpuk")
    .GetWeapon();

āļŠāđˆāļ§āļ™āđ‚āļ„āđ‰āļ”āļ‚āļ­āļ‡āļ„āļĨāļēāļŠ SwordMaker āļāđ‡āļˆāļ°āđ€āļ›āđ‡āļ™āđāļšāļšāļ™āļĩāđ‰āļ™āļąāđˆāļ™āđ€āļ­āļ‡

public class SwordMaker
{
    private int cardSlots = 2;
    private string productName;
    private string elementType;
    private string creatorName;

    public SwordMaker SetName(string name)
    {
        productName = name;
        return this;
    }

    public SwordMaker SetElement(string element)
    {
        cardSlots = 0;
        elementType = element;
        return this;
    }

    public SwordMaker SetCreatorName(string name)
    {
        creatorName = name;
        return this;
    }

    public Weapon GetWeapon()
    {
        return new Weapon
        {
            Name = productName,
            Element = elementType,
            CreatorName = creatorName,
            PhysicalAttack = 10,
            MaximumSlots = cardSlots,
            MinimumAttackRange = 1,
            WeaponType = "sword"
        };
    }
}

āļˆāļēāļāļ—āļĩāđˆāļ§āđˆāļēāđ„āļ›āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ€āļĢāļēāļāđ‡āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡ interface āļāļĨāļēāļ‡āļ—āļĩāđˆāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ­āļēāļ§āļļāļ˜āļ•āđˆāļēāļ‡āđ†āđ„āļ”āđ‰āļ­āļ­āļāļĄāļēāļĢāļēāļ§āđ†āļ™āļĩāđ‰

āļ‹āļķāđˆāļ‡āļˆāļēāļāļ—āļĩāđˆāļ—āļģāļĄāļēāļ—āļąāđ‰āļ‡āļŦāļĄāļ” āđ€āļĢāļēāļāđ‡āļˆāļ°āđ„āļ”āđ‰āļŠāļīāđˆāļ‡āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāļ§āđˆāļē Builder āđāļĨāđ‰āļ§āļ™āļąāđˆāļ™āđ€āļ­āļ‡āļ„āļĢāļąāļŠ āđ‚āļ”āļĒāđ€āļˆāđ‰āļēāļ„āļĨāļēāļŠ Builder āļ™āļąāđ‰āļ™āļĄāļĩāļŦāļ™āđ‰āļēāļ—āļĩāđˆāđƒāļ™āļāļēāļĢāļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ object āļ•āđˆāļēāļ‡āļ—āļģāđ„āļ”āđ‰āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™ āđ‚āļ”āļĒāļ—āļĩāđˆ Builder āđāļ•āđˆāļĨāļ°āļ•āļąāļ§āļāđ‡āļˆāļ°āļ•āđ‰āļ­āļ‡āļĢāļđāđ‰āđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚ āļ‚āđ‰āļ­āļˆāļģāļāļąāļ” āļŦāļĢāļ·āļ­āļāļŽāļ•āđˆāļēāļ‡āđ†āļ—āļĩāđˆāļ•āļąāļ§āļĄāļąāļ™āđ€āļ­āļ‡āļ•āđ‰āļ­āļ‡āļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ”āđ‰āļ§āļĒ āđ€āļĨāļĒāļ—āļģāđƒāļŦāđ‰āđ€āļĢāļēāļĄāļĩ builder āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ‚āļ­āļ‡āđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™āđ„āļ”āđ‰āļŦāļĨāļēāļĒāđ†āđāļšāļšāļ™āļąāđˆāļ™āđ€āļ­āļ‡ (āļĨāļ­āļ‡āđ„āļ›āļ”āļđāđ‚āļ„āđ‰āļ”āļˆāļĢāļīāļ‡āđ†āļ—āļĩāđˆāļ”āđ‰āļēāļ™āļĨāđˆāļēāļ‡āļŠāļļāļ”āđ„āļ”āđ‰āļ™āļ° āļ§āđˆāļē builder āļĄāļąāļ™āļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āļ‚āļ­āļ‡āļĄāļąāļ™āļ•āđˆāļēāļ‡āļāļąāļ™āļĒāļąāļ‡āđ„āļ‡)

ðŸĪ” āļĄāļąāļ™āđƒāļŠāđ‰āļ‡āļēāļ™āļĒāļēāļāđ„āļ›āļŦāļ™āđˆāļ­āļĒāđ„āļŦāļĄ ?

āđāļĄāđ‰āļ§āđˆāļēāđ€āļĢāļēāļˆāļ°āļ—āļģāđƒāļŦāđ‰āđ‚āļ„āđ‰āļ”āđ€āļĢāļēāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™āđ€āļĒāļ­āļ°āđ€āļĄāļ·āđˆāļ­āđ€āļ—āļĩāļĒāļšāļāļąāļšāđ‚āļ„āđ‰āļ”āđāļĢāļāđ€āļĢāļīāđˆāļĄāļ‚āļ­āļ‡āđ€āļĢāļēāļĨāļ° āđāļ•āđˆāļ–āđ‰āļēāļ—āļļāļāļ„āļĢāļąāđ‰āļ‡āļ—āļĩāđˆāđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ”āļēāļ› āđ€āļĢāļēāļāđ‡āļ•āđ‰āļ­āļ‡āđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ”āđāļšāļšāļ”āđ‰āļēāļ™āļĨāđˆāļēāļ‡āļ™āļĩāđ‰āđ€āļŠāļĄāļ­ āļĄāļąāļ™āļˆāļ°āļ—āļģāđƒāļŦāđ‰āđ‚āļ›āļĢāđāļāļĢāļĄāļ‚āļ­āļ‡āđ€āļĢāļēāļĄāļĩāđ‚āļ„āđ‰āļ”āļ‹āđ‰āļģāļāļąāļ™āđ€āļ•āđ‡āļĄāđ„āļ›āļŦāļĄāļ”āđ€āļĨāļĒāđ€āļŦāļĢāļ­ ? āđāļšāļšāļ™āļĩāđ‰āļāđ‡āļ‚āļąāļ”āļāļąāļšāļŦāļĨāļąāļāđƒāļ™āļāļēāļĢāļ­āļ­āļāđāļšāļšāđ€āļĢāļ·āđˆāļ­āļ‡ Don't Repeat Yourself (DRY) āļ­āļ°āļ”āļī ??

var fireSword = new SwordMaker()
    .SetName("Katana")
    .SetElement("Fire")
    .SetCreatorName("Saladpuk")
    .GetWeapon();

āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļžāļ·āđˆāļ­āđāļāđ‰āļ›āļąāļāļŦāļēāļ‚āļ­āļ‡āļžāļ§āļāļ™āļĩāđ‰ āļĄāļąāļ™āđ€āļĨāļĒāļĄāļĩāļ­āļĩāļāļ•āļąāļ§āļ™āļķāļ‡āļ—āļĩāđˆāļˆāļ°āļĄāļēāļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļĢāļēāļ—āļģāļ‡āļēāļ™āļāļąāļš Builder āđ„āļ”āđ‰āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™ āļ™āļąāđˆāļ™āļāđ‡āļ„āļ·āļ­āļŠāļīāđˆāļ‡āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāļ§āđˆāļē Director āļ™āļąāđˆāļ™āđ€āļ­āļ‡

āđ‚āļ”āļĒāđ€āļˆāđ‰āļē director āļˆāļ°āļ—āļģāļŦāļ™āđ‰āļēāļ—āļĩāđˆāđƒāļ™āļāļēāļĢāļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļĢāļēāļŠāļĢāđ‰āļēāļ‡āļ‚āļ­āļ‡āļ•āđˆāļēāļ‡āđ†āļ­āļ­āļāļĄāļē āđ‚āļ”āļĒāļ—āļĩāđˆāđ€āļĢāļēāđ„āļĄāđˆāļˆāļģāđ€āļ›āđ‡āļ™āļ•āđ‰āļ­āļ‡āļĢāļđāđ‰āļ­āļ°āđ„āļĢāđ€āļĨāļĒ āđāļ„āđˆāļšāļ­āļāļĄāļąāļ™āļ§āđˆāļēāđ€āļĢāļēāļ­āļĒāļēāļāđ„āļ”āđ‰āļ­āļ°āđ„āļĢ āļāļąāļš āļ­āļĒāļēāļāđ„āļ”āđ‰āļĢāļđāļ›āđāļšāļšāđ„āļŦāļ™āļāđ‡āļžāļ­ āđ€āļŠāđˆāļ™ āđƒāļ™āļāļĢāļ“āļĩāļ‚āļ­āļ‡āđ€āļĢāļēāļāđ‡āļˆāļ°āļĄāļĩāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ­āļēāļ§āļļāļ˜ 2 āđāļšāļšāļ™āļąāđˆāļ™āļ„āļ·āļ­ āļ­āļēāļ§āļļāļ˜āļ˜āļĢāļĢāļĄāļ”āļē āļāļąāļš āļ­āļēāļ§āļļāļ˜āļ˜āļēāļ•āļļ āđ€āļĨāļĒāļ—āļģāđƒāļŦāđ‰āđ€āļĢāļēāļĄāļĩ director āļŦāļ™āđ‰āļēāļ•āļēāļ›āļĢāļ°āļĄāļēāļ“āļ™āļĩāđ‰

āļ‹āļķāđˆāļ‡āđ€āļˆāđ‰āļē Director āļˆāļ°āļĢāļđāđ‰āļ§āđˆāļēāļ–āđ‰āļēāđ€āļĢāļēāļ­āļĒāļēāļāļˆāļ°āđ„āļ”āđ‰āļ­āļēāļ§āļļāļ˜āļ˜āļĢāļĢāļĄāļ”āļē āļŦāļĢāļ·āļ­ āļ­āļēāļ§āļļāļ˜āļ˜āļēāļ•āļļ āļĄāļąāļ™āļˆāļ°āļ•āđ‰āļ­āļ‡āļŠāļąāđˆāļ‡āļ‡āļēāļ™ Builder āđƒāļŦāđ‰āļ—āļģāļ‡āļēāļ™āļĒāļąāļ‡āđ„āļ‡āļ–āļķāļ‡āļˆāļ°āđ„āļ”āđ‰āļ‚āļ­āļ‡āļ—āļĩāđˆāđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāļāļĨāļąāļšāļĄāļēāđ€āļŠāļĄāļ­āļ™āļąāđˆāļ™āđ€āļ­āļ‡

public class WeaponDirector
{
    public Weapon CreateBasicWeapon(IWeaponMaker maker)
    {
        return maker
                .SetCreatorName("Saladpuk")
                .GetWeapon();
    }

    public Weapon CreateFireWeapon(IWeaponMaker maker)
    {
        return maker
                .SetElement("Fire")
                .SetCreatorName("Saladpuk")
                .GetWeapon();
    }

    // āļ‚āļ­āđ€āļ‚āļĩāļĒāļ™āđāļ„āđˆāļ™āļĩāđ‰āļ™āļ° āļšāļ—āļ„āļ§āļēāļĄāļĒāļēāļ§āļĄāđŠāļ§āļāļĨāļ°
}

āļĒāļīāļ™āļ”āļĩāļ”āđ‰āļ§āļĒāđƒāļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļ„āļļāļ“āđ„āļ”āđ‰āđƒāļŠāđ‰āļŠāļīāđˆāļ‡āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāļ§āđˆāļē Builder Pattern āđ€āļĢāļĩāļĒāļšāļĢāđ‰āļ­āļĒāđāļĨāđ‰āļ§ āđ„āļĄāđˆāļ§āđˆāļēāļˆāļ°āļĢāļđāđ‰āļ•āļąāļ§āļŦāļĢāļ·āļ­āđ„āļĄāđˆāļāđ‡āļ•āļēāļĄ āđ€āļĒāđˆāđ† 👏

ðŸĪ” Builder āļ„āļ·āļ­āđ„āļĒ ?

ðŸ”Ĩ āđ€āļ›āđ‰āļēāļŦāļĄāļēāļĒāđƒāļ™āļāļēāļĢāđāļāđ‰āļ›āļąāļāļŦāļē

  • āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļĢāļē āļŠāļĢāđ‰āļēāļ‡ object āļ—āļĩāđˆāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™ āđƒāļŦāđ‰āļ–āļđāļāļŠāļĢāđ‰āļēāļ‡āđ„āļ”āđ‰āļ‡āđˆāļēāļĒāđ†

  • āļŠāđˆāļ§āļĒāđƒāļŦāđ‰ āđ‚āļ„āđ‰āļ”āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ—āļĩāđˆāđ€āļŦāļĄāļ·āļ­āļ™āđ†āļāļąāļ™āļĢāļ§āļĄāļ­āļĒāļđāđˆāļ—āļĩāđˆāđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āđāļ•āđˆāļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡ object āļ—āļĩāđˆāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™āđ„āļ”āđ‰

ðŸ”Ĩ āļ§āļīāļ˜āļĩāļāļēāļĢāđƒāļŠāđ‰

āļ•āļĢāļ‡āļˆāļļāļ”āļ™āļĩāđ‰āļˆāļ°āļ‚āļ­āļ­āļ˜āļīāļšāļēāļĒāļ­āļ­āļāđ€āļ›āđ‡āļ™āļ—āļĩāļĨāļ°āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđāļšāļšāļ™āļĩāđ‰āļĨāļ°āļāļąāļ™ āļ„āļ™āļ—āļĩāđˆāļžāļķāđˆāļ‡āļŦāļąāļ”āļ­āļ­āļāđāļšāļšāļˆāļ°āđ„āļ”āđ‰āđ€āļ‚āđ‰āļēāđƒāļˆāđ„āļ”āđ‰āļ‡āđˆāļēāļĒāđ†āļ™āļ°

āđ€āļ§āļĨāļēāļ—āļĩāđˆāđ€āļĢāļēāļ­āļĒāļēāļāļŠāļĢāđ‰āļēāļ‡āļ­āļ°āđ„āļĢāļāđ‡āļ•āļēāļĄ āđ€āļˆāđ‰āļēāļŠāļīāđˆāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļˆāļ°āđ€āļĢāļĩāļĒāļāļĄāļąāļ™āļ§āđˆāļē Product āļ‹āļķāđˆāļ‡āđ€āļˆāđ‰āļēāļ•āļąāļ§āļ™āļĩāđ‰āđāļ™āļ°āļ™āļģāļ§āđˆāļēāđƒāļŦāđ‰āļĄāļąāļ™āđ€āļ›āđ‡āļ™ interface āđ„āļ”āđ‰āļāđ‡āļˆāļ°āļ”āļĩāļĄāļēāļ

āļŠāđˆāļ§āļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ product āļ™āļąāđ‰āļ™āļĄāļąāļ™āļ­āļēāļˆāļˆāļ°āļĄāļĩ options āđƒāļŦāđ‰āđ€āļĨāļ·āļ­āļāļˆāļļāļāļˆāļīāļāļĄāļēāļāļĄāļēāļĒ āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļāđ‡āļˆāļ°āļ—āļģāđ€āļ›āđ‡āļ™ interface āļāļĨāļēāļ‡āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļ­āļēāđ„āļ§āđ‰āļ‹āļ° āđ‚āļ”āļĒāđ€āļĢāļēāļˆāļ°āđ€āļĢāļĩāļĒāļāļĄāļąāļ™āļ§āđˆāļē Builder āđāļĨāļ°āļžāļ§āļ options āļ•āđˆāļēāļ‡āđ†āļ—āļĩāđˆāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāđˆāļĄāđ€āļ‚āđ‰āļēāđ„āļ›āđ„āļ”āđ‰āđ€āļĢāļēāļāđ‡āļˆāļ°āđāļ›āļĨāļ‡āđƒāļŦāđ‰āļĄāļąāļ™āđ€āļ›āđ‡āļ™āđ€āļĄāļ˜āļ­āļ”āļ•āđˆāļēāļ‡āđ†āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāđˆāļĄāļĨāļ”āđ„āļ”āđ‰āļ™āļąāđˆāļ™āđ€āļ­āļ‡ āđāļĨāļ°āļāđ‡āļ­āļĒāđˆāļēāļĨāļ·āļĄāđƒāļŦāđ‰āļĄāļąāļ™āļĄāļĩāļĄāļĩāļ˜āļ­āļ”āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ product āļˆāļĢāļīāļ‡āđ†āļ”āđ‰āļ§āļĒāļ™āļ°āļ•āļēāļĄāļĢāļđāļ›āđ€āļĨāļĒ

āđ€āļˆāđ‰āļēāļ•āļąāļ§āļ—āļĩāđˆāļˆāļ°āļŠāļĢāđ‰āļēāļ‡ product āļ—āļĩāđˆāđāļ—āđ‰āļˆāļĢāļīāļ‡ āļāđ‡āļˆāļ°āļĄāļē implement IBuilder āļ•āđˆāļ­āļ­āļĩāļāļ—āļĩāļ™āļķāļ‡ āđāļĨāļ°āļĄāļąāļ™āļāđ‡āļˆāļ°āļĢāļđāđ‰āđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚ āļāļŽāļ•āđˆāļēāļ‡āđ†āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ product āļ—āļĩāđˆāļĄāļąāļ™āļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ­āļĒāļđāđˆāļ™āļąāđˆāļ™āđ€āļ­āļ‡ āļ‹āļķāđˆāļ‡āđ€āļĢāļēāđ€āļĢāļĩāļĒāļāļĄāļąāļ™āļ§āđˆāļē ConcreteBuilder āļ‹āļķāđˆāļ‡āļ–āđ‰āļēāđ€āļĢāļēāļĄāļĩ product āļŦāļĨāļēāļĒāđ†āđāļšāļš āļāđ‡āļˆāļ°āļĄāļĩ ConcreteBuilder āļŦāļĨāļēāļĒāđ†āļ•āļąāļ§āļ™āļąāđˆāļ™āđ€āļ­āļ‡ āļ•āļēāļĄāļĢāļđāļ›āļ”āđ‰āļēāļ™āļĨāđˆāļēāļ‡

āļŠāļļāļ”āļ—āđ‰āļēāļĒāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ—āļĩāđˆāđ€āļŦāļĄāļ·āļ­āļ™āđ†āļāļąāļ™ āđ€āļĢāļēāļāđ‡āļˆāļ°āđƒāļŦāđ‰āļĄāļąāļ™āđ„āļ›āļ­āļĒāļđāđˆāļāļąāļšāļŠāļīāđˆāļ‡āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāļ§āđˆāļē Director āļ™āļąāđˆāļ™āđ€āļ­āļ‡ āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļ­āļēāļˆāļˆāļ°āļĄāļĩāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļŦāļĨāļēāļĒāđ†āđāļšāļšāđ„āļ§āđ‰āļāļąāļš Director āļāđ‡āđ„āļ”āđ‰

āļ”āļąāļ‡āļ™āļąāđ‰āļ™āļ āļēāļžāļĢāļ§āļĄāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ‚āļ­āļ‡ Builder Pattern āđ€āļĨāļĒāļ­āļ­āļāļĄāļēāđ€āļ›āđ‡āļ™āļ›āļĢāļ°āļĄāļēāļ“āļ™āļĩāđ‰

āđ„āļŦāļ™āļĨāļ­āļ‡āđ€āļ­āļēāļ—āļĩāđˆāđ€āļĢāļēāļ­āļ­āļāđāļšāļšāļĄāļēāđ€āļ—āļĩāļĒāļšāļāļąāļ™āļ”āļđāļ”āļīāđŠ ... āđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļ™āđ€āļ›āļĩāđŠāļĒāļšāđ€āļšāļĒ

ðŸĪ” āļ—āļģāđ„āļĄāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āļ”āđ‰āļ§āļĒ ?

ðŸĨ° āļĨāļ”āļāļēāļĢāļšāļ§āļĄ

āļˆāļēāļāļ›āļąāļāļŦāļēāļ”āđ‰āļēāļ™āļšāļ™āļ—āļĩāđˆāđ€āļ§āļĨāļēāļĄāļĩāļ‚āļ­āļ‡āđƒāļŦāļĄāđˆāđ†āđ€āļžāļīāđˆāļĄāđ€āļ‚āđ‰āļēāļĄāļēāļĄāļąāļ™āļˆāļ°āļ—āļģāđƒāļŦāđ‰āļ„āļĨāļēāļŠāļ‚āļ­āļ‡āđ€āļĢāļēāļšāļ§āļĄāļ­āļ­āļ āđ„āļĄāđˆāļšāļ§āļĄāļ­āļ­āļāļ‚āđ‰āļēāļ‡ āļāđ‡āļ­āļ­āļāļšāļ§āļĄāļ­āļ­āļāđƒāļ™āđāļ™āļ§āļ”āļīāđˆāļ‡ āđāļ–āļĄ parameters āļ—āļĩāđˆāļŠāđˆāļ‡āđ„āļ›āļšāļēāļ‡āļ—āļĩāļāđ‡āđ„āļĄāđˆāļˆāļģāđ€āļ›āđ‡āļ™āļ•āđ‰āļ­āļ‡āļŠāđˆāļ‡āđ„āļ›āļāđ‡āđ„āļ”āđ‰āļŠāļģāļŦāļĢāļąāļšāļēāļ‡āļāļēāļĢāļ“āļĩ āļāđ‡āļ™āđˆāļēāļˆāļ°āļžāļ­āđ€āļŦāđ‡āļ™āļ‚āđ‰āļ­āļ”āļĩāļ‚āļ­āļ‡āļāļēāļĢāđƒāļŠāđ‰ Builder āđ€āļžāļĩāļĒāļ‡āļ­āļĒāđˆāļēāļ‡āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āđāļĨāđ‰āļ§āļ™āļ° āđ€āļžāļĢāļēāļ°āļĄāļąāļ™āļ—āļģāđƒāļŦāđ‰āđ€āļĢāļēāļ›āļĢāļąāļšāđāļ•āđˆāļ‡āđ€āļžāļīāđˆāļĄāļĨāļ”āđ„āļ”āđ‰āļ•āļēāļĄāđƒāļˆāļŠāļ­āļšāđ€āļĨāļĒ

ðŸĨ° āļĨāļ”āļ„āļ§āļēāļĄāļ‹āđ‰āļģāļ‹āđ‰āļ­āļ™

āļˆāļ°āđ€āļŦāđ‡āļ™āļ§āđˆāļēāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ­āļēāļ§āļļāļ˜āđ„āļĄāđˆāļ§āđˆāļēāļˆāļ°āđ€āļ›āđ‡āļ™āđāļšāļš āļ­āļēāļ§āļļāļ˜āļ˜āļĢāļĢāļĄāļ”āļē āļŦāļĢāļ·āļ­ āļ­āļēāļ§āļļāļ˜āļ˜āļēāļ•āļļ āļĄāļąāļ™āļāđ‡āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ—āļĩāđˆāļ•āļēāļĒāļ•āļąāļ§āđƒāļ™āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡āļĄāļąāļ™ āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđāļ—āļ™āļ—āļĩāđˆāđ€āļĢāļēāļˆāļ°āļ•āđ‰āļ­āļ‡āđ„āļ›āđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ”āđ€āļ”āļīāļĄāļ‹āđ‰āļģāđ† āđ€āļĢāļēāļāđ‡āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāđ‚āļ„āđ‰āļ”āļžāļ§āļāļ™āļąāđ‰āļ™āđ„āļ›āđ„āļ§āđ‰āđƒāļ™ director āđ€āļžāļ·āđˆāļ­āļĨāļ”āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ”āļ‹āđ‰āļģāđ„āļ”āđ‰āđāļĨāđ‰āļ§ āđāļ–āļĄāđ‚āļ„āđ‰āļ”āļ•āļąāļ§āļ™āļąāđ‰āļ™āļĒāļąāļ‡āļŠāļēāļĄāļēāļĢāļ–āļœāļĨāļīāļ• product āļ—āļĩāđˆāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļšāļšāđ€āļ”āļĩāļĒāļ§āļāļąāļ™āđ„āļ”āđ‰āļ­āļĩāļāđ„āļĄāđˆāļˆāļģāļāļąāļ”āļĢāļđāļ›āđāļšāļšāđ€āļĨāļĒ āđ€āļžāļĩāļĒāļ‡āđāļ„āđˆāļŠāđˆāļ‡ Builder style āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāđ€āļ‚āđ‰āļēāļĄāļēāļ™āļąāđˆāļ™āđ€āļ­āļ‡

āļŦāļĄāļēāļĒāđ€āļŦāļ•āļļ āļāļēāļĢāđƒāļŠāđ‰ Builder Pattern āļ™āļąāđ‰āļ™āļˆāļĢāļīāļ‡āđ†āļĄāļĩāļ­āļĩāļāļŦāļĨāļēāļĒāđ€āļĢāļ·āđˆāļ­āļ‡āđ€āļĨāļĒāļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļ‚āđ‰āļ­āļ”āļĩ āđ€āļŠāđˆāļ™

  • āļĨāļ” Hardcode āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ object

  • āļĨāļ”āļ›āļąāļāļŦāļēāđ€āļĢāļ·āđˆāļ­āļ‡ Dependencies āļ•āđˆāļēāļ‡āđ†

  • āļĨāļ”āļ›āļąāļāļŦāļēāđ€āļĢāļ·āđˆāļ­āļ‡āļāļēāļĢāđ€āļ—āļŠ

āļ‹āļķāđˆāļ‡āļœāļĄāđ€āļ‚āļĩāļĒāļ™āļ­āļ˜āļīāļšāļēāļĒāđ„āļ§āđ‰āđƒāļ™ Factory Pattern āļ™āđˆāļēāļˆāļ°āļĨāļ°āđ€āļ­āļĩāļĒāļ”āļžāļ­āļ­āļĒāļđāđˆāđāļĨāđ‰āļ§ āļ”āļąāļ‡āļ™āļąāđ‰āļ™āļĨāļ­āļ‡āđ„āļ›āļ­āđˆāļēāļ™āļāļąāļ™āļ”āļđāđ„āļ”āđ‰āļˆāļēāļāļĨāļīāļ‡āļ„āđŒāļ™āļĩāđ‰āđ€āļšāļĒāļ„āļĢāļąāļŠ Factory Pattern āļ—āļģāđ„āļĄāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āļ”āđ‰āļ§āļĒ ?

📝 āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”āļ—āļąāđ‰āļ‡āļŦāļĄāļ”

static void Main(string[] args)
{
    var director = new WeaponDirector();

    var swordMaker = new SwordMaker();
    var basicSword = director.CreateBasicWeapon(swordMaker);
    var earthSword = director.CreateFireWeapon(swordMaker);
    Console.WriteLine(basicSword);
    Console.WriteLine(earthSword);

    var staffMaker = new StaffMaker();
    var basicStaff = director.CreateBasicWeapon(staffMaker);
    var waterStaff = director.CreateWaterWeapon(staffMaker);
    Console.WriteLine(basicStaff);
    Console.WriteLine(waterStaff);

    var bowMaker = new BowMaker();
    var basicBow = director.CreateBasicWeapon(bowMaker);
    var windBow = director.CreateWindWeapon(bowMaker);
    Console.WriteLine(basicBow);
    Console.WriteLine(windBow);
}

āļœāļĨāļĨāļąāļžāļ—āđŒ Saladpuk (-) Katana sword [2] slots, Atk: 10, MAtk: 0, Range: 1 Saladpuk (Fire) Katana sword [0] slots, Atk: 10, MAtk: 0, Range: 1 Saladpuk (-) Soul staff [2] slots, Atk: 0, MAtk: 10, Range: 5 Saladpuk (-) Soul staff [2] slots, Atk: 0, MAtk: 10, Range: 5 Saladpuk (-) Hunter bow [2] slots, Atk: 10, MAtk: 0, Range: 12 Saladpuk (Wind) Hunter bow [0] slots, Atk: 10, MAtk: 0, Range: 12

ðŸŽŊ āļšāļ—āļŠāļĢāļļāļ›

👍 āļ‚āđ‰āļ­āļ”āļĩ

āļāļēāļĢāļ™āļģ Builder Pattern āļĄāļēāđƒāļŠāđ‰āļ‡āļēāļ™āļ™āļąāđ‰āļ™āļˆāļ°āļŠāđˆāļ§āļĒ āļĨāļ”āļāļēāļĢāļœāļđāļāļāļąāļ™āļ‚āļ­āļ‡āđ‚āļ„āđ‰āļ”āļĨāļ‡ āļ—āļģāđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡ āđāļāđ‰āđ„āļ‚ āļĢāļ­āļ‡āļĢāļąāļšāļŠāļīāđˆāļ‡āļ•āđˆāļēāļ‡āđ†āđ„āļ”āđ‰āļĄāļēāļāļ‚āļķāđ‰āļ™ āđāļ–āļĄāļĒāļąāļ‡āļŠāđˆāļ§āļĒāļĨāļ”āđ‚āļ„āđ‰āļ”āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ object āļ—āļĩāđˆāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļŦāļĄāļ·āļ­āļ™āđ†āļāļąāļ™āđ„āļ”āđ‰āļ­āļĩāļāļ”āđ‰āļ§āļĒ

👎 āļ‚āđ‰āļ­āđ€āļŠāļĩāļĒ

āđāļ„āđˆāļˆāļ°āļŠāļĢāđ‰āļēāļ‡ object āđƒāļŦāļĄāđˆāđ€āļ‰āļĒāđ† āļāđ‡āđ€āļžāļīāđˆāļĄāđ‚āļ„āđ‰āļ”āđ€āļ‚āđ‰āļēāđ„āļ›āļĄāļŦāļēāļĻāļēāļĨāđāļĨāđ‰āļ§ āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļˆāļ°āļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļ‚āļķāđ‰āļ™āļ­āļĩāļāđ€āļĒāļ­āļ°āđ€āļĨāļĒ āļ”āļąāļ‡āļ™āļąāđ‰āļ™āļāđˆāļ­āļ™āđƒāļŠāđ‰āđƒāļŦāđ‰āļ„āļīāļ”āđƒāļŦāđ‰āļ”āļĩāļāđˆāļ­āļ™āļ§āđˆāļē āđ€āļĢāļēāļĄāļĩāļ›āļąāļāļŦāļēāļ–āļķāļ‡āļ‚āļ™āļēāļ”āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āļĄāļąāļ™āļŦāļĢāļ·āļ­āđ€āļ›āļĨāđˆāļē?

ðŸĪ™ āļ—āļēāļ‡āđ€āļĨāļ·āļ­āļ

āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ™āļģ Framework āļžāļ§āļ Dependency Injection (DI) āđ€āļ‚āđ‰āļēāļĄāļēāđƒāļŠāđ‰āđāļ—āļ™āđ„āļ”āđ‰āļ™āļ°āļˆāđŠāļ° āđ‚āļ„āđ‰āļ”āļāļĢāļ°āļŠāļąāļšāļŦāļĨāļąāļšāļŠāļšāļēāļĒāđ€āļ•āđ‡āļĄāļ•āļ·āđˆāļ™āļ”āđ‰āļ§āļĒ

Last updated

Was this helpful?