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即可,很好的遵循了設計模式的開閉原則(對於修改是封閉的,對於擴展是開發的)。