工厂方法设计模式

时间:2013-09-12 06:25:51

标签: .net design-patterns

我是设计模式的新手。我试图在我当前的应用程序中使用工厂方法设计模式。在应用程序中,我有两组(即group1和group2),每组将有不同的方法。将应用程序角色用作类并从产品继承(即group2)是一种好的做法。任何人都可以告诉我下面的示例代码是对还是错。

class Creator
{
    static void Main(string[] args)
    {
        if (args[0] == "GroupHead")
        {
            IGroup2 gh = new GroupHead();
        }
        else if (args[0] == "ProjectIncharge")
        {
            IGroup2 gh = new ProjectIncharge();
        }
    }
}


interface IGroup1
{
    List<Employee> GetEmployees();
}

interface IGroup2
{
    List<Projects> GetProjects();
}

public class Group : IGroup1
{
    public List<Employee> GetEmployees()
    {
        //Code here
    }
}

public class GroupHead : IGroup2
{
    public List<Projects> GetProjects()
    {
        //Code here
    }
}

public class ProjectIncharge : IGroup2
{
    public List<Projects> GetProjects()
    {
        //Code here
    }
}

public class ProjectManager : IGroup2
{
    public List<Projects> GetProjects()
    {
        //Code here
    }
}

1 个答案:

答案 0 :(得分:0)

您可以使用以下模式执行此操作,根据searchoption返回初始化对象。

        interface IGroup2
        {
            string SearchOption { get; set; }
            List<Projects> GetProjects();
        }

        public class GroupHead : IGroup2
        {
            public string SearchOption { get; set; }

            public GroupHead()
            {
                SearchOption = "GroupHead";
            }

            public List<Projects> GetProjects()
            {   
                //Code here
                return null;
            }
        }

        public class ProjectIncharge : IGroup2
        {
            public string SearchOption { get; set; }

            public ProjectIncharge()
            {
                SearchOption = "ProjectIncharge";
            }

            public List<Projects> GetProjects()
            {
                //Code here
                return null;
            }
        }

        public class ProjectManager : IGroup2
        {
            public string SearchOption { get; set; }

            public ProjectManager()
            {
                SearchOption = "ProjectManager";
            }

            public List<Projects> GetProjects()
            {
                //Code here
                return null;
            }
        }

public class Test
{
        private static List<IGroup2> searchRuleList = new List<IGroup2>()
        {
          new GroupHead(),
          new ProjectIncharge(),
          new ProjectManager(),
        };

        public static void Main(string[] args)
        {
         IGroup2 searchOptionRule = searchRuleList.Find(delegate(IGroup2 searchRule) { return searchRule.SearchOption.Equals(args[0]); });

        } 
}