Man*_*anu 8 oop design-patterns
什么是建立多对多关系的最佳方式?
假设我们有两个类,Team和Player
我喜欢称之为的方法
playerX.getTeamList()获取他/她所在团队的名单teamY.getPlayerList()获取团队中所有玩家的列表(或者有其他方式有效地做到这一点)
我可以想到两种方法,但他们感觉不像是一个好的oop pattens.你能想到任何好方法吗,也许是设计模式?
球员和球队之间的关系形成了二分图.期待评论(和downvotes?)!我是OOD noob.
class MyPlayer
{
public string Name { get; set; }
public MyPlayer(string n)
{
Name = n;
}
}
class MyTeam
{
public string Name { get; set; }
public MyTeam(string n)
{
Name = n;
}
}
class PlayerTeamPair
{
public MyPlayer Player { get; set; }
public MyTeam Team { get; set; }
public PlayerTeamPair(MyPlayer p,MyTeam t)
{
Player = p;
Team = t;
}
}
class PlayerTeamBipartiteGraph
{
public List<PlayerTeamPair> Edges { get; set; }
public PlayerTeamBipartiteGraph()
{
Edges = new List<PlayerTeamPair>();
}
public void AddPlayerAndTeam(MyPlayer p, MyTeam t)
{
Edges.Add(new PlayerTeamPair(p, t));
}
public List<MyTeam> GetTeamList(MyPlayer p)
{
var teams = from e in Edges where e.Player == p select e.Team;
return teams.ToList<MyTeam>();
}
public List<MyPlayer> GetPlayerList(MyTeam t)
{
var players = from e in Edges where e.Team == t select e.Player;
return players.ToList<MyPlayer>();
}
}
class Program
{
static void Main(string[] args)
{
var G = new PlayerTeamBipartiteGraph();
MyPlayer a = new MyPlayer("A");
MyPlayer b = new MyPlayer("B");
MyPlayer c = new MyPlayer("C");
MyPlayer d = new MyPlayer("D");
MyTeam t1 = new MyTeam("T1");
MyTeam t2 = new MyTeam("T2");
G.AddPlayerAndTeam(a, t1);
G.AddPlayerAndTeam(b, t1);
G.AddPlayerAndTeam(c, t1);
G.AddPlayerAndTeam(b, t2);
G.AddPlayerAndTeam(d, t2);
G.GetTeamList(b).ForEach(t => Console.Write(" {0} ",t.Name));
Console.WriteLine();
G.GetPlayerList(t2).ForEach(p => Console.Write(" {0} ",p.Name));
Console.WriteLine();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4495 次 |
| 最近记录: |