一:构造注入:
<?php
class Main
{
public $name;
//构造注入
public function __construct($str)
{
$this->name = $str;
}
public function Method()
{
$this->name->Method();
}
}
class A
{
public function Method()
{
echo '我是A';
}
}
class B
{
public function Method()
{
echo '我是B';
}
}
$a=new Main(new A()); //注入A类
$a->Method();
Main类依赖A类,通过构造器传入参数,一旦A类参数发生修改,Main类不需要改动,只需修改调用的地方,因为A类的创建在外部,这样Main类就无需关心A类。
二:工厂模式
<?php interface Getdata { public function Method(); } class A implements Getdata { public function Method() { echo "我是A"; } } class B implements Getdata { public function Method() { echo "我是B"; } } class Factory { public static function bind($transport) { switch ($transport) { case 'A': return new A(); break; case 'B': return new B(); break; } } } $getdata = Factory::bind('A'); // 加载A类 $getdata -> Method();
进一步解耦出来,这里AB类参数需要改动,只需要改动Factory类,Main可以设置切换不同的类,这种模式很常见,比如缓存,自由切换memcache,redis,db等,都可以用这种模式切换。这种需要一一对应,各类的实例化在工厂中完成,各类的方法结构必须统一,如果需求增加,工厂也会变的更庞大。