首页 > 代码库 > 简单工厂模式和策略模式结合使用php
简单工厂模式和策略模式结合使用php
策略模式是有客户端自行实例化算法类的,而简单工厂模客户端只传参数,不关心对象的生成。
结合两种模式,可以在使用策略模式的时候客户端不再生成算法的对象。修改策略模式的配置类即可。
在之前策略模式基础上,修改如下
<?php/* * 策略模式:定义一系列算法,并且把每一个算法封装起来,并且使它们可以相互替换 * 策略模式使得算法可以独立于使用它的客户而变化 */ //抽象策略接口,完成某件事情interface category{ public function dosomething();} //具体算法类,实现具体的事情class category_a implements category{ public function dosomething(){ echo ‘do A‘; }} class category_b implements category{ public function dosomething(){ echo ‘do B‘; }} class category_c implements category{ public function dosomething(){ echo ‘do C‘; }}class handel_error implements category{ public function dosomething(){ echo ‘wrong param‘; }}//配置类,使用抽象策略接口来配置class context{ public $cg; public function __construct($a){//构造函数实现了工厂方法 switch ($a){ case ‘a‘: $this->cg = new category_a();break; case ‘b‘: $this->cg = new category_b();break; case ‘c‘: $this->cg = new category_c();break; default: $this->cg = new handel_error();break; } } public function dodo(){ return $this->cg->dosomething();//同一方法作用于不同类的对象,产生不同的结果,这在php中就是多态 }} //客户端调用,由客户自己决定使用哪种策略,即客户自行实例化算法类。区别于简单工厂模式//简单工厂模式是对象的创建模式,客户端不创建对象,只给出参数,由工厂方法来决定创建哪一个实例//也就是说,简单工厂模式客户端只传参数,策略模式客户端传算法实例$m = new context(‘b‘);$m->dodo();?>
简单工厂模式和策略模式结合使用php
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。