直到開始運(yùn)行你才知道需要的是什么種類的對象。
使用 工廠方法(Factory Method) 模式和選擇對象都是動態(tài)生成的。
你需要將一個文件加載到編輯器,但是直到用戶選擇文件時你才知道它的格式。一個類使用工廠方法 ( Factory Method ) 模式可以根據(jù)文件的擴(kuò)展名提供不同的解析器。
class HTMLParser
constructor: ->
@type = "HTML parser"
class MarkdownParser
constructor: ->
@type = "Markdown parser"
class JSONParser
constructor: ->
@type = "JSON parser"
class ParserFactory
makeParser: (filename) ->
matches = filename.match /\.(\w*)$/
extension = matches[1]
switch extension
when "html" then new HTMLParser
when "htm" then new HTMLParser
when "markdown" then new MarkdownParser
when "md" then new MarkdownParser
when "json" then new JSONParser
factory = new ParserFactory
factory.makeParser("example.html").type # => "HTML parser"
factory.makeParser("example.md").type # => "Markdown parser"
factory.makeParser("example.json").type # => "JSON parser"
在這個示例中,你可以關(guān)注解析的內(nèi)容,忽略細(xì)節(jié)文件的格式。更先進(jìn)的工廠方法,例如,搜索版本控制文件中的數(shù)據(jù)本身,然后返回一個更精確的解析器(例如,返回一個 HTML5 解析器而不是 HTML v4 解析器)。