PHP设计模式-工厂设计模式
来源:互联网 发布:微信开发必须80端口 编辑:程序博客网 时间:2024/06/05 18:52
PHP设计模式-工厂设计模式
简介
工厂模式,如其名称一样,就是一个工厂,用于创建产品。使用工厂模式的好处就是请求者只需要发出请求,具体的实例化过程交给工厂模式,省去了new
的过程。并且如果后期开发,类名发生变化,只需要调整工厂模式中一行new
相关代码,不需要修改一大堆代码。
简要写法
最简单的工厂模式,实际上就是一个switch case
结构,通过传入的类名,实例化相应的类。例如:
class DBFactory{ static function make($db_name) { switch ($db_name) { case 'MySQL': return 'MySQL'; case 'SQL Server': return 'SQL Server'; default: return 'Nothing'; } }}echo DBFactory::make('MySQL');
这样假设,新增了数据库支持,可以直接修改make
方法即可,另外如果MySQL
类被修改为Mariadb
(都差不多), 不需要调整echo DBFactory::make('MySQL');
,只需要修改工厂类中的case 'MySQL': return 'Mariadb';
连接数据库经常使用的就是PDO
:
public function __construct ($dsn, $username, $passwd, $options)
这是PDO的构造函数,通过对$dsn
参数的判断就可以连接不同的数据库。但是对上一层来说,就和刚刚的简单实例是一样的了。
稍微复杂一点的写法
也就是不仅仅有工厂类,还有产品类,每个产品都有自己的工厂,这些工厂统一继承自工厂的抽象基类(接口也行),而这些产品也统一继承工厂的抽象基类(或者实现接口)。这样创建产品以后可以直接调用产品的相关方法,而不是返回实例。
<?phpabstract class Factory{ protected abstract function make(); public function doMake() { return $this->make(); }}class TextFactory extends Factory{ protected function make() { $product = new TextProduct(); return $product->show(); }}class ImgFactory extends Factory{ protected function make() { $product = new ImgProduct(); return $product->show(); }}interface Product{ public function show();}class TextProduct implements Product{ public function show() { echo 'TEXT'; }}class ImgProduct implements Product{ public function show() { echo 'IMG'; }}$tf = new TextFactory();$tf->domake();$if = new ImgFactory();$if->domake();
这么写有一个好处,假如我的文本和图像产品,输出格式需要修改,只需要修改echo就好,其余部分不需要修改。
参数化工厂-代码提示
<?phpclass Factory{ private $product = null; public function make(Product $product) { $this->product = $product; return $this->product->show(); }}interface Product{ public function show();}class TextProduct implements Product{ public function show() { echo 'TEXT'; }}$tf = new Factory();$tf->make(new TextProduct);
这样写,我的类只要实现了Product
接口,就能自动的加入工厂类中,不用担心如何调用show
方法。
分类
目前大家说的比较多的三种方式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
抽象工厂模式
也就是Factory
类提供多个make方法,这些多个make方法应该是相关或者相互依赖的。
阅读全文
0 0
- 【PHP设计模式】工厂模式
- php设计模式:工厂模式
- php设计模式 工厂模式
- PHP设计模式-工厂模式
- php设计模式-工厂模式
- PHP设计模式-工厂模式
- php设计模式:工厂模式,
- PHP设计模式---工厂模式
- PHP设计模式-工厂模式
- php设计模式-工厂模式
- php设计模式---工厂模式
- PHP设计模式---工厂模式
- PHP设计模式-工厂设计模式
- PHP 常见工厂设计模式
- PHP 常见工厂设计模式
- PHP 常见工厂设计模式
- PHP设计模式之工厂
- PHP设计模式系列 - 工厂模式
- Ambari引入kafka服务并进行基本的测试
- 面试怎么谈薪资——让自己的利益最大化
- Servlet生命周期与工作原理
- jsonp解决同源问题和java结合使用
- 初学Linux--shell
- PHP设计模式-工厂设计模式
- 初探-----同步,异步,阻塞,非阻塞
- linux创建文件的获取读写文件权限设置
- Android进阶#(8/12)让不断升级的系统更好管理——Git 版本控制_Git基本命令
- windows下anaconda(Python)中xgboost的安装
- python系列二(面向对象)
- hdu 6170(正则表达式)
- rz/sz
- [翻译]理解Unity的自动内存管理