在Java中链接两个抽象工厂模式
我正在编写一个报价匹配程序,其中需要两个抽象工厂模式,这是两个接口QuoteFactory和模式工厂。ModeFactory在EasyMode和HardMode之间切换,QuoteFactory在几个不同的主题之间选择引用(即政治引用、体育引用)。简而言之,用户将选择一种模式,如果选择EasyMode,则用户必须猜测报价,而如果用户选择HardMode,则用户被告知谁说了报价,然后必须猜测,因此报价的实现将根据模式以及所选的报价而变化
到目前为止,我已经创建了ModeFactory作为接口,并将其实现为EasyMode和HardMode,但现在我需要以某种方式将另一个抽象工厂模式(或更多)集成到这些模式中,以便可以选择引号。如果有用的话,我还创建了一个Quote类,在其中定义了我的引号
有人能帮我想出这些抽象工厂的基本实现吗?这是我到目前为止所拥有的东西的概要,尽管我忍不住觉得我以某种方式把它复杂化了
编辑:对我的意思进行重新分类:如果用户选择简单模式,则会向他们提供引用的开头和作者,而如果用户选择硬模式,则只会向他们提供引用的开头。比如
简易模式: “我感受到了……的力量。” 何塞·穆里尼奥
硬模式: “我感受到了……的力量。”
硬模式不允许作者让用户更难猜测引用的其余部分。而且,这不是学校的作业。我一直在阅读Head First设计模式,现在我正在尝试将我学到的知识应用到不同的情况中(而不是他们的披萨示例),在阅读了QI(英国电视节目)一书之后,我正在做一个猜测报价的游戏
public interface ModeFactory {
public Mode retrieveMode(String s);
}
public interface QuoteFactory {
public Quote retrieveQuote(String s);
}
# 1 楼答案
你能后退一步,重申你想做什么吗?我有时会发现,通过向不熟悉挑战的人解释挑战,解决方案在某种程度上有机地浮现在我面前
从您的描述来看,似乎您是从一个局部解决方案(“我想使用一个抽象工厂模式”)开始的,而不是从您真正想做的事情开始(例如,“我想提供一个报价类,根据口味(政治、体育)和模式(简单、困难)”提供不同的报价)
在我看来,这就像一个枚举,而不是一个工厂。有一个枚举用于{political,sports},另一个枚举用于mode
编辑:再想一想,可能是学校作业(“使用抽象工厂模式来……诸如此类”),这就是为什么你从一个半解决方案开始
# 2 楼答案
不需要太多思考,也不需要尝试按照您的设计,这样的事情怎么样(我假设Quote类有getText()和getAuthor方法,您可能还想让它成为getText(int numberOfWords),这样您就可以配置要给出多少Quote):