ðïļ Builder Pattern
āđāļāļ§āļāļīāļāđāļāļāļēāļĢāļĢāļąāļāļĄāļ·āļāļāļąāļ object āļāļĩāđāļĄāļĩāļāļąāđāļāļāļāļāļāļēāļĢāļŠāļĢāđāļēāļāļāļąāļāļāđāļāļ
āđāļāđāļēāļāļąāļ§āļāļĩāđāļāļĄāļāļāļāļąāđāļāļāļ·āđāļāđāļāđāļāļ āļēāļĐāļēāđāļāļĒāļ§āđāļē āļāļđāđāļŠāļĢāđāļēāļ āđāļĨāļ°āļĄāļąāļāļāļĒāļđāđāđāļāļāļĨāļļāđāļĄāļāļāļ ðΰ Creational Patterns āļāļķāđāļāđāļāđāļēāļāļąāļ§āļāļĩāđāļāļ°āļĄāļēāļāđāļ§āļĒāđāļāđāļāļąāļāļŦāļēāđāļĄāļ·āđāļ āđāļĢāļēāļĄāļĩāļāļĨāļēāļŠāļāļĩāđāļĄāļĩāļāļąāđāļāļāļāļāđāļāļāļēāļĢāļŠāļĢāđāļēāļāļāļąāļāļāđāļāļ āđāļĨāļ° āļāļēāļĢāļŠāļĢāđāļēāļ object āļŦāļĨāļēāļĒāđāļāļĒāđāļēāļāļāļĩāđāļĄāļĩāļāļąāđāļāļāļāļāđāļāļāļēāļĢāļŠāļĢāđāļēāļāļāļĨāđāļēāļĒāđāļāļąāļ (āļāļĒāđāļēāļāļķāđāļāđāļŠāļĩāļĒāđāļ§āļĨāļēāļāđāļēāļāļāļąāļ§āļŦāļāļēāļāļ§āļāļāļąāđāļāđāļĨāļĒ) āđāļāļāļđāđāļāļāļĒāđāļāļāļāđāļĢāļēāļāļąāļāđāļĨāļĒāļāļĩāļāļ§āđāļēāļāļ°āđāļāđāđāļāđāļēāđāļāđāļāđāđāļĢāđāļ§āļāļķāđāļ
āļŦāļĄāļēāļĒāđāļŦāļāļļ āđāļāļ·āđāļāļŦāļēāļāļāļāļāļāļāļ§āļēāļĄāļāļĩāđāļāļ°āđāļāđāļāđāļŦāđāđāļāđāļēāđāļāļŦāļĨāļąāļāļāļēāļĢāļāļģāļāļēāļāļāļāļ Design Patterns āđāļāđāļĨāļ°āļāļąāļ§ āđāļāļĒāđāļāđāđāļāļĄ Ragnarok āđāļāđāļāļāļēāļĢāļāļāļīāļāļēāļĒ āļāļķāđāļāļāļēāļāļāļĒāđāļēāļāļāļēāļāļāļ°āđāļĄāđāļāļĢāļāļāļąāļāļāļąāļ§āđāļāļĄāļāļĢāļīāļāđāļāļ°āļāļāļĢāļąāļ Gravity āļāļĒāđāļēāļĄāļēāļāļąāļāļāļĄāļāļ°āļāļĄāđāļāļāđāļĄāļ§āļāđāļģāļāļĢāļāļāļāļģ + āļĢāļđāđāđāļāđāļēāđāļĄāđāļāļķāļāļāļēāļĢ + āļāļĄāđāļāđāļāļāļāļāļĩ + āļāļĄāļĄāļĩāļĨāļđāļāļĄāļĩāđāļĄāļĩāļĒāļĄāļĩāļŠāļēāļĄāļĩāļāļĩāđāļāđāļāļāļāļđāđāļĨ ð
ð§ āđāļāļāļĒāđ
āļŠāļĄāļĄāļļāļāļīāļ§āđāļēāđāļāļĄāļāļāļāđāļĢāļēāļĄāļĩ āļĢāļ°āļāļāļŠāļĢāđāļēāļāļāļēāļ§āļļāļ āđāļāļĒāļāļēāļ§āļļāļāļāļĩāđāļŠāļĢāđāļēāļāļāļāļāļĄāļēāļāļąāđāļāļĄāļĩ 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 āļĒāļąāļāđāļāļĨāđāļ°
Single-Responsibility Principle (SRP) āļāļēāļĢāļāļāļāđāļāļāļāļĩāđāļĨāļ°āđāļĄāļīāļāļŦāļĨāļąāļāđāļāļāļēāļĢāļāļāļāđāļāļāļāļĩāđāļāļ°āļāļģāđāļŦāđ āđāļ§āļĨāļēāļāļĩāđ Requirement āđāļāļĨāļĩāđāļĒāļāļĄāļēāļāļĩāļāļķāļ āļĄāļąāļāļāđāļāļĄāļĩāđāļāļāļēāļŠāļŠāļđāļāļĄāļēāļāļāļĩāđāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļāļąāđāļāļĄāļąāļāļāļ°āđāļāļāļĢāļ°āļāļāđāļāđāļēāļŠāļīāđāļāļāļąāđāļ āļāļģāđāļŦāđāđāļĢāļēāļāđāļāļāđāļāđāđāļāļĄāļąāļ āļāļķāđāļāļāļāļāđāļāļ·āđāļāļāļāļ·āđāļāđāļāļĩāđāļĄāļąāļāļāļđāđāļĨāļāļĒāļđāđāļāļąāđāļāđāļĄāđāđāļāđāđāļāļĩāđāļĒāļ§āļāđāļāļāđāļĨāļĒāļāđāļĄāļĩāļāļĨāļāļĢāļ°āļāļāļāđāļ§āļĒāļāļąāđāļāđāļāļ āļŠāđāļ§āļāđāļāļĢāļāļĩāđāļĨāļ·āļĄāļŦāļĢāļ·āļāļāļĒāļēāļāļāļāļāļ§āļāđāļĢāļ·āđāļāļ SRP āļŠāļēāļĄāļēāļĢāļāđāļāđāļēāđāļāļāđāļēāļāđāļāđāļāļēāļāļĨāļīāļāļāđāļāļĩāđāđāļāļĒ Single-Responsibility Principle
Open & Close Principle (OCP) āļāļēāļĢāļāļāļāđāļāļāļāļĩāđāļĨāļ°āđāļĄāļīāļāļŦāļĨāļąāļāđāļāļāļēāļĢāļāļāļāđāļāļāļāļĩāđāļāļ°āļāļģāđāļŦāđāļāļļāļāļāļĢāļąāđāļāļāļĩāđāļĄāļĩāļāļāļāđāļŦāļĄāđāđāļāļđāļāđāļāļīāđāļĄāđāļāđāļēāđāļāļāļļāđāļ āđāļĢāļēāļāđāļāđāļāļāđāļāđāļāđāđāļāđāļāđāļāļīāļĄāđāļŠāļĄāļ āļŠāļģāļŦāļĢāļąāļāđāļāļĢāļāļĩāđāļĨāļ·āļĄāļŦāļĨāļąāļāđāļāļāļēāļĢāļāļāļāđāļāļāđāļĢāļ·āđāļāļāļāļĩāđāđāļāđāļĨāđāļ§āđāļŦāđāļāļāļāđāļēāļāđāļāđāļāļēāļāļāļĢāļāļāļĩāđ Open & Close Principle
āļāļēāļ§āļĨāđāļ°āđāļĄāļ·āđāļāļĄāļēāļāļķāļāļāļĢāļāļāļĩāđ āļāļĄāļāļāđāļāļĨāļāđāļāđāļāļāļąāđāļāļŦāļĄāļāļāļāļāđāļĢāļēāđāļŦāđāđāļāđāļāđāļāļ āļēāļāļāļĢāļ°āļĄāļēāļāļāļĩāđāļĨāļ°āļāļąāļāļāļ°āđāļāđāđāļāđāļēāđāļāļāļąāļāđāļāđāļāđāļēāļĒāđ āđāļĨāđāļ§āđāļāļĩāđāļĒāļ§āđāļĢāļēāļĨāļāļāđāļāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāļąāļāļŦāļē āđāļĨāđāļ§āļāđāļāļĒāđāđāļāđāļāļąāļāļŦāļēāļāļąāļāļāļĩāļĨāļ°āļāļļāļāļāļąāļāļāļĩāļāļ§āđāļē

ð§ āđāļāđāđāļāļāļĒāđāļāļĢāļąāđāļāļāļĩāđ 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 āđāļĨāļĒāļāļāļāļĄāļēāđāļāđāļāļāļĢāļ°āļĄāļēāļāļāļĩāđ

āđāļŦāļāļĨāļāļāđāļāļēāļāļĩāđāđāļĢāļēāļāļāļāđāļāļāļĄāļēāđāļāļĩāļĒāļāļāļąāļāļāļđāļāļīāđ ... āđāļŦāļĄāļ·āļāļāļāļąāļāđāļāļĩāđāļĒāļāđāļāļĒ

āļāđāļāđāļāļ°āļāļģ āļāļāļāļāļļāļāļāļĒāđāļēāļāđāļ Design Patterns āļāļļāļāļāļąāļ§ āđāļĢāļēāđāļĄāđāļāļģāđāļāđāļāļāđāļāļāļāļģāļāļēāļĄ āļŦāļĢāļ·āļ āļĄāļĩāļāļĢāļāđāļŦāļĄāļ·āļāļāļāļēāļĄāļāļĩāđāđāļāļēāļāļāļāđāļ§āđāļāđāđāļāđ (āļāđāļēāđāļāđāļēāđāļ + āļĄāļĩāđāļŦāļāļļāļāļĨāļāļĩāđāļāļĩāļāļ) āđāļāļĢāļēāļ°āļŠāļīāđāļāļāļĩāđ Pattern āđāļāđāļĨāļ°āļāļąāļ§āļāđāļāļāļāļēāļĢāļāļ°āļāļāļāđāļĢāļēāļāļ·āļ āđāļāļ§āļāļēāļ āđāļĨāļ°āđāļŦāļāļļāļāļĨāđāļāļāļēāļĢāļāļāļāđāļāļāđāļāļĩāļĒāļāđāļāđāļēāļāļąāđāļ āļāļķāđāļāļŠāļīāđāļāļāļĩāđāđāļĢāļēāļāđāļāļāļāļģāļāđāļāļāđāļāļ·āļāļāļģāļĄāļąāļāđāļāļāļĢāļ°āļĒāļļāļāļāđāđāļŦāđāđāļāđāļēāļāļąāļāļāļąāļāļŦāļēāļāļĩāđāđāļĢāļēāđāļāļāļāļĒāļđāđāđāļŦāđāđāļŦāļĄāļēāļ°āļŠāļĄāļāļąāđāļāđāļāļ
ðĪ āļāļģāđāļĄāļāđāļāļāđāļāđāļāđāļ§āļĒ ?
ðĨ° āļĨāļāļāļēāļĢāļāļ§āļĄ
āļāļēāļāļāļąāļāļŦāļēāļāđāļēāļāļāļāļāļĩāđāđāļ§āļĨāļēāļĄāļĩāļāļāļāđāļŦāļĄāđāđāđāļāļīāđāļĄāđāļāđāļēāļĄāļēāļĄāļąāļāļāļ°āļāļģāđāļŦāđāļāļĨāļēāļŠāļāļāļāđāļĢāļēāļāļ§āļĄāļāļāļ āđāļĄāđāļāļ§āļĄāļāļāļāļāđāļēāļ āļāđāļāļāļāļāļ§āļĄāļāļāļāđāļāđāļāļ§āļāļīāđāļ āđāļāļĄ parameters āļāļĩāđāļŠāđāļāđāļāļāļēāļāļāļĩāļāđāđāļĄāđāļāļģāđāļāđāļāļāđāļāļāļŠāđāļāđāļāļāđāđāļāđāļŠāļģāļŦāļĢāļąāļāļēāļāļāļēāļĢāļāļĩ āļāđāļāđāļēāļāļ°āļāļāđāļŦāđāļāļāđāļāļāļĩāļāļāļāļāļēāļĢāđāļāđ Builder āđāļāļĩāļĒāļāļāļĒāđāļēāļāđāļāļĩāļĒāļ§āļāļąāļāđāļĨāđāļ§āļāļ° āđāļāļĢāļēāļ°āļĄāļąāļāļāļģāđāļŦāđāđāļĢāļēāļāļĢāļąāļāđāļāđāļāđāļāļīāđāļĄāļĨāļāđāļāđāļāļēāļĄāđāļāļāļāļāđāļĨāļĒ
ðĨ° āļĨāļāļāļ§āļēāļĄāļāđāļģāļāđāļāļ
āļāļ°āđāļŦāđāļāļ§āđāļēāļāļąāđāļāļāļāļāđāļāļāļēāļĢāļŠāļĢāđāļēāļāļāļēāļ§āļļāļāđāļĄāđāļ§āđāļēāļāļ°āđāļāđāļāđāļāļ āļāļēāļ§āļļāļāļāļĢāļĢāļĄāļāļē āļŦāļĢāļ·āļ āļāļēāļ§āļļāļāļāļēāļāļļ āļĄāļąāļāļāđāļĄāļĩāļāļąāđāļāļāļāļāđāļāļāļēāļĢāļŠāļĢāđāļēāļāļāļĩāđāļāļēāļĒāļāļąāļ§āđāļāļĢāļđāļāđāļāļāļāļāļāļĄāļąāļ āļāļąāļāļāļąāđāļāđāļāļāļāļĩāđāđāļĢāļēāļāļ°āļāđāļāļāđāļāđāļāļĩāļĒāļāđāļāđāļāđāļāļīāļĄāļāđāļģāđ āđāļĢāļēāļāđāļŠāļēāļĄāļēāļĢāļāļāļģāđāļāđāļāļāļ§āļāļāļąāđāļāđāļāđāļ§āđāđāļ director āđāļāļ·āđāļāļĨāļāļāļēāļĢāđāļāļĩāļĒāļāđāļāđāļāļāđāļģāđāļāđāđāļĨāđāļ§ āđāļāļĄāđāļāđāļāļāļąāļ§āļāļąāđāļāļĒāļąāļāļŠāļēāļĄāļēāļĢāļāļāļĨāļīāļ product āļāļĩāđāļĄāļĩāļāļąāđāļāļāļāļāļāļēāļĢāļŠāļĢāđāļēāļāđāļāļāđāļāļĩāļĒāļ§āļāļąāļāđāļāđāļāļĩāļāđāļĄāđāļāļģāļāļąāļāļĢāļđāļāđāļāļāđāļĨāļĒ āđāļāļĩāļĒāļāđāļāđāļŠāđāļ Builder style āļāļĩāđāļāđāļāļāļāļēāļĢāđāļāđāļēāļĄāļēāļāļąāđāļāđāļāļ
ð āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļąāđāļāļŦāļĄāļ
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) āđāļāđāļēāļĄāļēāđāļāđāđāļāļāđāļāđāļāļ°āļāđāļ° āđāļāđāļāļāļĢāļ°āļāļąāļāļŦāļĨāļąāļāļŠāļāļēāļĒāđāļāđāļĄāļāļ·āđāļāļāđāļ§āļĒ
āļāđāļāļāļ§āļĢāļĢāļ°āļ§āļąāļ āļāļĒāđāļēāļāļģ Builder Pattern āđāļāđāļāđāļĄāļąāđāļ§āļāļąāđāļ§ āđāļāļĢāļēāļ°āļĄāļąāļāļāļģāđāļŦāđāđāļāđāļāļāļāļāđāļĢāļēāļāļąāļāļāđāļāļāļāļķāđāļāđāļĒāļāļ°āđāļĨāļĒāđāļāļāļāļĩāđāđāļĢāļēāļāļ°āđāļāđāļāļģāļŠāļąāđāļ new āđāļāļāļāļĢāļāļāļī āļāļąāļāļāļąāđāļāđāļŦāđāļāļąāđāļāļāđāļģāļŦāļāļąāļāđāļŦāđāļāļĩāđāļŠāļĩāļĒāļāđāļāļāļ§āđāļēāļāļąāļāļŦāļēāļāļĩāđāđāļĢāļēāđāļāļāļāļĒāļđāđāļāļąāđāļ āļĄāļąāļāļ§āļļāđāļāļ§āļēāļĒ āđāļāļŠāļĒāļēāļ āđāļāđāļāļĄāļąāļāļāļđāļāļāļąāļāļāļĒāļđāđāđāļĒāļāļ°āļŦāļĢāļ·āļāđāļāļĨāđāļē āļāđāļēāļāļąāđāļāļāđāļģāļŦāļāļąāļāđāļĨāđāļ§ + āļĄāļĩāđāļŦāļāļļāļāļĨāļāļĩāđāđāļāļĩāļĒāļāļāļāļāļĩāđāļāļ°āđāļāđāļāđāļāļāđāļāđāđāļŦāđāļŠāļāļēāļĒāđāļāđāļāđāļāļīāļ
āđāļāļĨāļĩāļĒāļ āļāļāļ āļāļđāļāđāļ āļāļĒāļēāļāļāļīāļāļāļēāļĄ āļāļĒāļēāļāļāļīāļāļĄāđāļāļ°āļāļģāļāđāļēāļāļ āļŦāļĢāļ·āļāļāļ°āđāļĢāļāđāđāļĨāđāļ§āđāļāđ (āļŦāđāļēāļĄāļĄāļēāļĒāļ·āļĄāđāļāļīāļ) āļāļīāđāļĄāļĨāļāļĄāļēāļāļĩāđāđāļāļāļāļĩāđāđāļāđāđāļĨāļĒ Mr.Saladpuk āđāļĨāļ°āļāļ°āđāļāđāļāļāļĢāļ°āļāļļāļāļāļąāļāļĨāđāļāļāđāļāļāđāļēāļāļ Like + Follow + Share āđāļŦāđāļāđāļ§āļĒāļāļāļĢāļąāļ āļāđāļģāļāļēāļāļīāđāļŦāļĨ ðĨš
Last updated
Was this helpful?