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即可,很好的遵循了设计模式的开闭原则(对于修改是封闭的,对于扩展是开发的)。