<?php interface traffic { public function go(); } class Car implements traffic { public function go() { echo 'drive car to France !!'; } } class Leg implements traffic { public function go() { echo 'walt to France !!'; } } class Train implements traffic { public function go() { echo 'go to France by train !!'; } } class TrafficToolFactory { public function createTrafficTool($name) { switch ($name) { case 'Leg' : return new Leg(); break; case 'Car' : return new Car(); break; case 'Train' : return new Train(); break; default: throw new \Exception("ste trafficTool error !!!"); break; } } } class Traveller { protected $trafficTool; public function __construct($trafficTool) { //通过工厂产生依赖 $factory =new TrafficToolFactory(); $this->trafficTool=$factory->createTrafficTool($trafficTool); } public function visitTibet(){ $this->trafficTool->go(); } } $tra =new Traveller('car'); $tra->visitTibet();
1丶我们实例化Traveller,传递参数car;
2丶实例化将调用构造方法,在构造方法中实例化了一个TrafficToolFactory类,这个类启着一个分流处理请求的作用,意思就是根据传递参数来判断实例化什么类返回什么数据;相当于做了一个连接池;
2丶当我们实例化TrafficToolFactory调用createTrafficTool方法,并且传递最开始传递的参数car,switch来进行分流,匹配传递的参数实例化对应的类;即我们在Traveller类中的trafficTool属性就是一个实例化的car类;
3丶当我们调用Traveller的visitTibet方法,进行调用trafficTool的go方法,即car类的go方法;
最后输出 drive car to France !!
其他类似。这个只是举例说明这个方法处理过程!
参考书籍laravel框架关键技术