我有这个任务,我希望根据他们可以回答的可选问题向人们展示某些内容。这是一个类似的简化示例:
人们可以选择三种类别:情绪,身高,颜色。他们每个人的选择有限。你只能是一个心情和高度,但你可以是多种颜色。所以,A人可能选择快乐,高大,蓝色。 B人可能是悲伤的,短的,绿色的,黄色的和紫色的。 C人可能会感到沮丧和橙色。
根据他们的选择,会向他们展示一些图像。但是一些图像仅依赖于某些组合。例如,向所有身材高大的人展示一张图片。另一个是那些快乐或悲伤和蓝色的人。另一张图片仅显示给悲伤和绿色的人(仅)或快乐和紫色(仅限)。
我正在使用HTML,CSS和JavaScript / jQuery。我一直在考虑为每个类别使用不同的数据类型。然后我想我应该有一个不同的数据类型的情绪,高度和每种不同的颜色(这将填充是或否)。然后,在线查看一些过滤插件,我想也许我会用课程来做。但是,当某些类必须被链接时,这些都会产生问题。
图像只是一个例子;实际上有相当多的内容需要显示,所以我试图找到最轻的解决方案。
我知道我可以编写一些嵌套循环来完成此任务。我一直在考虑在输入和过滤之后用连字符连接某些类。 (例如,从上面开始:如果有人回答他们是悲伤和绿色的,那么在他们以悲伤的绿色进入它们之后连接它们然后将特定的内容标记为悲伤的绿色)。这样,我可以拥有有限数量的课程(可以合并),而不必制作疯狂数量的不同课程。
我不确定哪个最好,或者我(可能)错过了一些明显,优雅的方法来实现这一目标。任何建议,将不胜感激;非常感谢!
答案 0 :(得分:0)
在顶部,这听起来像chain of responsibilities设计,关于让你通过每个规则的情况,直到它被第一个适用的规则捕获。当然,在你的情况下,它听起来更像是tree of responsibility,但在其中可以使用switch-cases或类似的东西来完成。以您的示例为例,使用c#
语法:
public class Person
{
public string Height;
public string Mood;
public List<string> Colour;
}
public void Decide(Person someone)
{
switch (someone.Height)
{
case "tall":
DecideOnColour(someone);
break;
case "short":
DecideOnMood(someone);
break;
}
}
public void DecideOnColour(Person someone)
{
foreach (string colour in someone.Colour)
{
switch (someone.Colour)
{
//Do something...
}
}
if (someone.Colour.Contains("Green"))
// Do something else...
}