enum QuestionType {
case MultipleChoice
case Range
case TrueFalse
case Text
}
protocol Question {
func printQuestion()
}
class TextQuestion: Question {
fileprivate init() {
}
func printQuestion() {
print("this is a text question")
}
}
class TrueFalseQuestion: Question {
fileprivate init() {
}
func printQuestion() {
print("this is a TrueFalse question")
}
}
class RangeQuestion: Question {
fileprivate init() {
}
func printQuestion() {
print("this is a Range question")
}
}
class MultipleChoiceQuestion: Question {
fileprivate init() {
}
func printQuestion() {
print("this is a MultipleChoice question")
}
}
// here i have created fileprivate init so that only way to initialize MultipleChoiceQuestion, RangeQuestion, TextQuestion and TrueFalseQuestion is by QuestionFactory. (as QuestionFactory will be in same file).
class QuestionFactory {
class func CreateQuestion(type: QuestionType) -> Question{
switch type {
case .MultipleChoice:
return MultipleChoiceQuestion()
case .Range:
return RangeQuestion()
case .Text:
return TextQuestion()
case .TrueFalse:
return TrueFalseQuestion()
}
}
}
==========
somewhere in other file....
let question: Question = QuestionFactory.CreateQuestion(type: .MultipleChoice) // instead of multiple choice, it should be selected dynamically by user and based on user choice appropriate object should be created.
Aucun commentaire:
Enregistrer un commentaire