作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以多项选择题游戏为例。
您有一个 MathQuestion 和 WordQuestion 类,它们是否应该实现一个 IQuestion 接口(interface),该接口(interface)定义了问题、答案和难度函数,或者更常见的是扩展问题基类并覆盖这些函数?
做这些事情哪种方法更正确?
最佳答案
这是思考问题的另一种方式 - MathQuestion 和 WordQuestion 之间真的有什么不同吗?对我来说,听起来它们都是问题对象,您可以通过 composition 区分不同类型。 .
您可以先定义一个 Enum列出出现在测验中的不同类型问题的类(严格来说 ActionScript 3 没有适当的枚举,但我们仍然可以使用以下代码实现类型安全。)
public class QuestionType {
public static const MATH : QuestionType = new QuestionType("math");
public static const WORLD : QuestionType = new QuestionType("world");
private var _name : String;
// Private constructor, do no instantiate new instances.
public function QuestionType(name : String) {
_name = name;
}
public function toString() : String {
return _name;
}
}
然后您可以在构造问题类时将其中一个 QuestionType 常量传递给它:
public class Question {
private var _message : String /* Which country is Paris the capital of? */
private var _answers : Vector.<Answer>; /* List of possible Answer objects */
private var _correctAnswer : Answer; /* The expected Answer */
private var _type : QuestionType; /* What type of question is this? */
public function Question(message : String,
answers : Vector.<Answer>,
correctAnswer : Answer,
type : QuestionType) {
_message = message;
_answers = answers.concat(); // defensive copy to avoid modification.
_correctAnswer = correctAnswer;
_type = type;
}
public function getType() : QuestionType {
return _type;
}
}
最后,客户端(使用问题对象的代码)可以轻松查询问题类型:
public class QuizView extends Sprite {
public function displayQuestion(question : Question) : void {
// Change the background to reflect the QuestionType.
switch(question.type) {
case QuestionType.WORLD:
_backgroundClip.gotoAndStop("world_background");
break;
case QuestionType.MATH:
_backgroundClip.gotoAndStop("math_background");
break;
}
}
}
关于actionscript-3 - AS3 - 何时实现或扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6020617/
我是一名优秀的程序员,十分优秀!