【風趣的解釋】
Abstract Factory Mode
請美眉去麥當勞吃漢堡,不同的美眉有不同的口味,要每個都記住是一件煩人的事情,我一般采用Factory Method Mode,帶著美眉到服務員那兒,說“要一個漢堡”,具體要什么樣的漢堡呢,讓美眉直接跟服務員說就行了。
【正式的解釋】
抽象工廠模式
核心工廠類不再負責所有產品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去做,成為一個抽象工廠角色,僅負責給出具體工廠類必須實現的接口,而不接觸哪一個產品類應當被實例化這種細節(jié)。
【Python版】
#-*- coding: utf-8 -*-
#漢堡抽象工廠
class HamburgerFactory(object):
def createHamburger(self):
pass
#漢堡里加辣椒的工廠
class HamburgerWithPepperFacotry(HamburgerFactory):
def createHamburger(self):
print "A hamburder with pepper is ready."
#漢堡里加火腿的工廠
class HamburgerWithHamFacotry(HamburgerFactory):
def createHamburger(self):
print "A hamburder with ham is ready."
#美眉A 喜歡吃辣椒
class MeiMeiA(object):
def getHamburder(self):
print "I want to a hanburger with pepper."
hamburgerFactory = HamburgerWithPepperFacotry()
hamburgerFactory.createHamburger()
#美眉B 喜歡吃火腿
class MeiMeiB(object):
def getHamburder(self):
print "I want to a hanburger with ham."
hamburgerFactory = HamburgerWithHamFacotry()
hamburgerFactory.createHamburger()
if __name__ == "__main__":
mA = MeiMeiA()
mA.getHamburder()
"""print out
I want to a hanburger with pepper.
A hamburder with pepper is ready.
"""
【JS版】
//漢堡抽象工廠
function HamburgerFactory(){
}
//漢堡里加辣椒的工廠
function HamburgerWithPepperFacotry(){
}
HamburgerWithPepperFacotry.prototype = new HamburgerFactory();
HamburgerWithPepperFacotry.prototype.constructor = HamburgerWithPepperFacotry;
HamburgerWithPepperFacotry.prototype.createHamburger = function(){
console.log("A hamburder with pepper is ready.");
}
//漢堡里加火腿的工廠
function HamburgerWithHamFacotry(){
}
HamburgerWithHamFacotry.prototype = new HamburgerFactory();
HamburgerWithHamFacotry.prototype.constructor = HamburgerWithHamFacotry;
HamburgerWithPepperFacotry.prototype.createHamburger = function(){
console.log("A hamburder with ham is ready.");
}
//美眉A 喜歡吃辣椒
function MeiMeiA(){
}
MeiMeiA.prototype.getHamburger = function(){
console.log("I want to a hanburger with pepper.");
hamburgerFactory = new HamburgerWithPepperFacotry();
hamburgerFactory.createHamburger();
}
//美眉B 喜歡吃火腿
function MeiMeiB(){
}
MeiMeiB.prototype.getHamburger = function(){
console.log("I want to a hanburger with ham.");
hamburgerFactory = new HamburgerWithHamFacotry();
hamburgerFactory.createHamburger();
}
var mA = new MeiMeiA();
mA.getHamburger();
/*console out
I want to a hanburger with pepper.
A hamburder with ham is ready.
*/