php实现工厂设计模式,使用接口实现,表面上接口没有什么用,因为php是类型自动转换的。实现上使用接口可以约束类的定义,从而实现一致的访问。
接口在php只能起到约束类的定义作用,虽不像c#/java那么直观,但基于oop的封装要求,使用接口可以提高程序的可扩展性,如实现代理设计模式。
<?php//人类接口interface IHuman{function GetName();}//男人类,实现人类接口class ManClass implements IHuman{//获取姓名方法 public function GetName(){return "I'm man."."<br>";}}//女人类,实现人类接口class WomanClass implements IHuman{//获取姓名方法 public function GetName(){return "I'm Woman."."<br>";}}//类工厂,根据需要生产不同实例对象返回class ManFactory{//根据参数获取实例对象public function GetIHuman($IHuman="man"){if($IHuman=="woman"){return new WomanClass();}else if($IHuman=="man"){return new ManClass();}else{return null;}}//直接获取woman类public function GetWoman(){return new WomanClass();//return new ManClass();}//直接获取man类public function GetMan(){return new ManClass();}}$ManFactory=new ManFactory();$ManClass=$ManFactory->GetIHuman();echo $ManClass->GetName();$IHuman=$ManFactory->GetIHuman("woman");echo $IHuman->GetName();$Woman=$ManFactory->GetWoman();echo $Woman->GetName();$Man=$ManFactory->GetMan();echo $Man->GetName();?>
运行结果:
I'm man.
I'm Woman.
I'm Woman.
I'm man.