ฉันใช้ C # และนี่คือแนวทางของฉัน พิจารณา:
class Foo
{
private readonly int i;
private readonly string s;
private readonly Bar b;
public int I { get { return i; } }
}
ตัวเลือกที่ 1. ตัวสร้างที่มีพารามิเตอร์เสริม
public Foo(int i = 0, string s = "bla", Bar b = null)
{
this.i = i;
this.s = s;
this.b = b;
}
new Foo(5, b: new Bar(whatever))
ใช้เป็นเช่น ไม่ใช่สำหรับ Java หรือ C # เวอร์ชันก่อน 4.0 แต่ก็ยังคุ้มค่าที่จะแสดงเนื่องจากเป็นตัวอย่างว่าโซลูชันทั้งหมดไม่ใช่ภาษาที่เข้าใจได้ง่าย
ตัวเลือกที่ 2 ตัวสร้างรับวัตถุพารามิเตอร์เดียว
public Foo(FooParameters parameters)
{
this.i = parameters.I;
}
class FooParameters
{
public int I { get; set; }
public string S { get; set; }
public Bar B { get; set; }
public FooParameters() { }
}
ตัวอย่างการใช้งาน:
FooParameters fp = new FooParameters();
fp.I = 5;
fp.S = "bla";
fp.B = new Bar();
Foo f = new Foo(fp);`
C # จาก 3.0 on ทำให้สิ่งนี้ดูหรูหรายิ่งขึ้นด้วยไวยากรณ์ของ object initializer (เทียบเท่าความหมายกับตัวอย่างก่อนหน้า):
FooParameters fp = new FooParameters { I = 5, S = "bla", B = new Bar() };
Foo f = new Foo(fp);
ตัวเลือกที่ 3:
ออกแบบชั้นเรียนของคุณใหม่โดยไม่จำเป็นต้องมีพารามิเตอร์จำนวนมากเช่นนี้ คุณสามารถแบ่งความรับผิดชอบออกเป็นหลายชั้นเรียน หรือส่งผ่านพารามิเตอร์ไม่ไปยังตัวสร้าง แต่ไปยังวิธีการเฉพาะตามต้องการ ไม่ได้ผลเสมอไป แต่เมื่อเป็นเช่นนั้นก็คุ้มค่าที่จะทำ