使用C#中的某种模式实现此功能的最佳方法是什么?

使用C#中的某种模式实现此功能的最佳方法是什么?,c#,design-patterns,challenge-response,C#,Design Patterns,Challenge Response,给定一个表示社交网络的数据结构,编写一个函数来查找一定程度的朋友。第一等级的朋友是会员的直接朋友,第二等级的朋友是会员朋友的朋友,不包括第一等级的朋友,等等 例如,如果A是B的朋友,B是C的朋友,那么GetFriendsOfDegree(A,2)应该返回C,因为C是A的唯一二级朋友(B是A的一级朋友) 方法名称:GetFriendsOfDegree 使用制度; 使用System.Collections.Generic; 公共班级成员 { 公共字符串电子邮件{get;private set;} 公

给定一个表示社交网络的数据结构,编写一个函数来查找一定程度的朋友。第一等级的朋友是会员的直接朋友,第二等级的朋友是会员朋友的朋友,不包括第一等级的朋友,等等

例如,如果A是B的朋友,B是C的朋友,那么GetFriendsOfDegree(A,2)应该返回C,因为C是A的唯一二级朋友(B是A的一级朋友)

方法名称:GetFriendsOfDegree
使用制度;
使用System.Collections.Generic;
公共班级成员
{
公共字符串电子邮件{get;private set;}
公共ICollection好友{get;private set;}
公共成员(字符串电子邮件):此(电子邮件,新列表())
{
}
公共成员(字符串电子邮件、ICollection好友)
{
this.Email=电子邮件;
这个。朋友=朋友;
}
public void AddFriends(ICollection好友)
{
foreach(朋友中的成员朋友)
this.Friends.Add(Friends);
}
公众朋友(会员朋友)
{
this.Friends.Add(Friends);
}
}
公课朋友
{
公共静态列表GetFriendsOfDegree(成员成员,int度)
{
抛出新的NotImplementedException(“等待实现”);
}
公共静态void Main(字符串[]args)
{
成员a=新成员(“a”);
成员b=新成员(“b”);
成员c=新成员(“c”);
a、 秘书长(b);
b、 秘书长(c);
foreach(GetFriendsOfDegree(a,2))中的成员朋友
Console.WriteLine(friend.Email);
}
}

这是一个可以用算法解决的图形问题。图的表示形式非常适合于实现BFS算法

创建成对的队列
(成员,距离)
,以及一组访问过的成员。以零距离推动初始构件

创建一个从队列读取的循环,并检查该成员是否是访问集的一部分。如果是,请放下该对并继续。否则,按距离
d+1
推送当前成员的所有好友,其中
d
是您已退出队列的成员的距离


当距离达到
度的目标距离时
,将成员收集到结果列表中。继续循环,直到队列为空。

?真的吗?…不。。只是想看看我是否使用了正确的方法,或者有人有其他想法来实现它?!酷。。。好主意,但我的主意是使用一些设计模式。。。简朴intuitive@YuriDuretti设计模式是关于不同抽象层次的。当您只需要实现单个类的单个方法时,您需要的是算法,而不是设计模式。是的!!!我同意,只是想看看我是否使用了正确的方法,或者有人有其他想法来实现它?!
Method name: GetFriendsOfDegree

using System;
using System.Collections.Generic;

public class Member
{
    public string Email { get; private set; }

    public ICollection<Member> Friends { get; private set; }

    public Member(string email) : this(email, new List<Member>())
    {
    }

    public Member(string email, ICollection<Member> friends)
    {
        this.Email = email;
        this.Friends = friends;
    }

    public void AddFriends(ICollection<Member> friends)
    {
        foreach (Member friend in friends)
            this.Friends.Add(friend);
    }

    public void AddFriend(Member friend)
    {
        this.Friends.Add(friend);
    }
}

public class Friends
{
    public static List<Member> GetFriendsOfDegree(Member member, int degree)
    {
        throw new NotImplementedException("Waiting to be implemented.");
    }

    public static void Main(string[] args)
    {
        Member a = new Member("A");
        Member b = new Member("B");
        Member c = new Member("C");

        a.AddFriend(b);
        b.AddFriend(c);

        foreach (Member friend in GetFriendsOfDegree(a, 2))
            Console.WriteLine(friend.Email);
    }
}