ฉันได้เรียน: A
ว่าเป็นคอมโพสิตของจำนวนของชั้นเรียนขนาดเล็กB
, และC
D
B
, C
และD
ใช้อินเตอร์เฟซIB
, IC
และID
ตามลำดับ
ตั้งแต่A
รองรับทุกการทำงานของB
, C
และD
, A
การดำเนินการIB
, IC
และID
เช่นกัน แต่นี้โชคไม่ดีที่นำไปสู่การเป็นจำนวนมากเส้นทางใหม่ในการดำเนินการA
ชอบมาก
interface IB
{
int Foo {get;}
}
public class B : IB
{
public int Foo {get {return 5;}}
}
interface IC
{
void Bar();
}
public class C : IC
{
public void Bar()
{
}
}
interface ID
{
string Bash{get; set;}
}
public class D: ID
{
public string Bash {get;set;}
}
class A : IB, IC, ID
{
private B b = new B();
private C c = new C();
private D d = new D();
public int Foo {get {return b.Foo}}
public A(string bash)
{
Bash = bash;
}
public void Bar()
{
c.Bar();
}
public string Bash
{
get {return d.Bash;}
set {d.Bash = value;}
}
}
มีวิธีกำจัดการเปลี่ยนเส้นทางต้นแบบนี้A
หรือไม่? B
, C
และD
ทั้งหมดใช้การทำงานที่แตกต่างกัน แต่ที่พบบ่อยและผมต้องการที่A
นำไปปฏิบัติIB
, IC
และID
เพราะมันหมายความว่าฉันสามารถผ่านในA
ตัวเองเป็นพึ่งพาการจับคู่การเชื่อมต่อเหล่านั้นและไม่ได้มีการเปิดเผยวิธีการช่วยเหลือด้านใน
A
ใช้IB
, IC
และID
มันเป็นความรู้สึกที่เหมาะสมมากขึ้นเพื่อเขียนPerson.Walk()
เมื่อเทียบกับPerson.WalkHelper.Walk()
ตัวอย่างเช่น