【風(fēng)趣的解釋】
Abstract Factory Mode
請(qǐng)美眉去麥當(dāng)勞吃漢堡,不同的美眉有不同的口味,要每個(gè)都記住是一件煩人的事情,我一般采用Factory Method Mode,帶著美眉到服務(wù)員那兒,說“要一個(gè)漢堡”,具體要什么樣的漢堡呢,讓美眉直接跟服務(wù)員說就行了。
【正式的解釋】
抽象工廠模式
核心工廠類不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去做,成為一個(gè)抽象工廠角色,僅負(fù)責(zé)給出具體工廠類必須實(shí)現(xiàn)的接口,而不接觸哪一個(gè)產(chǎn)品類應(yīng)當(dāng)被實(shí)例化這種細(xì)節(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.
*/