工廠方法模式實例與講解

abstract class ApptEncoder{
    abstract function encode();
}

class BloggsApptEncoder extends ApptEncoder{
    function encode(){
        return 'this is bloggs object';
    }
}

class MegaApptEncoder extends ApptEncoder{
    function encode(){
        return 'this is mega object';
    }
}

abstract class CommsManager{
    abstract function getHeaderText();
    abstract function getApptEncoder();
    abstract function getFooterText();
}

class BloggsCommsManager extends CommsManager{
    function getHeaderText(){
        return 'this is bloggs header';
    }

    function getApptEncoder(){
        return new BloggsApptEncoder();
    }

    function getFooterText(){
        return 'this is bloggs footer';
    }
}

class MegeCommsManger extends CommsManager{
    function getHeaderText(){
        return 'this is mega header';
    }

    function getApptEncoder(){
        return new MegaApptEncoder();
    }

    function getFooterText(){
        return 'this is mega footer';
    }
}

以上工廠模式方法的UML圖如下:




對以上的工廠模式方法,我們還可以進行擴展,如果此時,我們需要生成新的LogCommsManager,我們只需要讓LogCommsManager繼承抽象類CommsManager,然後創建新的類LogApptEncoder,讓LogApptEncoder繼承ApptEncoder即可,很好的遵循了設計模式的開閉原則對於修改是封閉的,對於擴展是開發的)。



發佈了66 篇原創文章 · 獲贊 6 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章