抽象工廠模式

【風趣的解釋】

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.
*/
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容