php 工厂模式 使用场景,用php写工厂模式

简单的工厂方法。

客户通过工厂发出请求,想要创建一个产品,但是这个产品和直接请求的类不存在绑定关系。

如果实例化的子类可能发生变化,就需要用到工厂。

class transportationFactory {

public function createBicycle(): Bicycle {

return new Bicycle();

}

public function createCar(): Car {

return new Car();

}

}

class Bicycle {

public function driveTo(string $destination){ echo $destination; }

}

class Car {

public function driveTo(string $destination){ echo $destination; }

}

$factory = new transportationFactory();

$bicycle = $factory->createBicycle();

$bicycle->driveTo('Paris');

$car = $factory->createCar();

$bicycle->driveTo('Lodon');

复杂的工厂

两个工厂有相似的功能,具体如何实现自己决定。

继承抽象类有抽象方法,由子类实现。为了保持子类统一,便于以后扩展维护方便,通常让子类继承同一个接口。

或者让其强制继承接口。

abstract class basefactory {

protected abstract function do();

public function sayhello() {

return $this->do();

}

}

Class Afactory extends basefactory {

protected function do() {

return (new M1)->dosomething();

}

}

Class Bfactory extends basefactory {

protected function do() {

return (new M2)->dosomething();

}

// public function __call($methods, $args) {

// echo 'oops, function ' . $methods . ' doesn\'t exist in ' . __class__;

// }

}

Interface I {

function dosomething();

}

Class M1 implements I {

public function dosomething() {

echo 'I am M1';

}

}

Class M2 implements I {

public function dosomething() {

echo 'I am M2';

}

}

Class M3 implements I {

public function dosomething() {

echo 'I am M3';

}

}

$a = (new Afactory)->sayhello();

$b = (new Bfactory)->sayhello();

用到工厂方法的场景

调用多种数据库类型的地方mysql/sqlserver/sqlite,数据都有connect,close,select,delete之类的封装方法。具体如何实现就由自己的sqlBuilder文件去完成了。

做一个图书资源的网站。网站包括各种学科,历史,地理,人文。每种学科呈现形式都会有video,audio,pdf;或者首页,子目录展现页,查询页,查询结果页之类的视图结果集。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值