php设计模式之简单工厂 Factory
PHP设计模式 简单工厂 Factory
工厂模式 Factory
工厂模式:由工厂类根据参数来决定创建出哪一种产片类的实例
工厂类:一个专门用来创建其他对象的方法类。
简单工厂
代码
<?php
//共同接口
interface db{
function conn();
}
class dbmysql implements db{
public function conn()
{
echo '连上了mysql';
}
}
class dbsqlite implements db{
public function conn()
{
echo '连上了sqllite';
}
}
class Factory {
public static function createDb($type)
{
if ($type=='mysql'){
return new dbmysql();
}elseif ($type=='sqlite'){
return new dbsqlite();
}else{
throw new Exception('error db type',1);
}
}
}
//然后客户端只知道接口的方法统一调用即可。
$mysql = Factory::createDb('mysql');
$mysql->conn();
其实这里就是一个工厂类根据我们传入的字符串或者其他你自己定义的标识符,来返回对应的对象。
添加一个工厂,由工厂负责创造对象,并返回
实例
场景:短信发送功能模块。现在我们使用了三个商家的,分别是阿里云、蝶信、极光的短信服务,在不同业务中可能使用不同的短信发送商,使用简单工厂可以方便的完成这个需求。
代码
<?php
interface Message {
public function send(string $msg);
}
class AliYunMessage implements Message{
public function send(string $msg){
// 调用接口,发送短信
// xxxxx
return '阿里云短信(原阿里大鱼)发送成功!短信内容:' . $msg;
}
}
class BaiduYunMessage implements Message{
public function send(string $msg){
// 调用接口,发送短信
// xxxxx
return '百度SMS短信发送成功!短信内容:' . $msg;
}
}
class JiguangMessage implements Message{
public function send(string $msg){
// 调用接口,发送短信
// xxxxx
return '极光短信发送成功!短信内容:' . $msg;
}
}
Class MessageFactory {
public static function createFactory($type){
switch($type){
case 'Ali':
return new AliYunMessage();
case 'BD':
return new BaiduYunMessage();
case 'JG':
return new JiguangMessage();
default:
return null;
}
}
}
// 当前业务需要使用极光
$message = MessageFactory::createMessage('Ali');
echo $message->send('您有新的短消息,请查收');
- 实例中传错了$type返回NULL怎么办?亲,实际写代码的时候请处理好这个问题哟,返回一个默认的,或者上层捕获都是不错的解决方案,当然最好客户端那边提前判断好,没问题了再进工厂吧
了解什么是特征以及如何使用它们的最好方法是观察它们的本质