首页 > php教程 > php手册 > 简单工厂模式和策略模式结合使用php

简单工厂模式和策略模式结合使用php

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-06-06 19:47:32
原创
1171 人浏览过

策略模式是有客户端自行实例化算法类的,而简单工厂模客户端只传参数,不关心对象的生成。 结合两种模式,可以在使用策略模式的时候客户端不再生成算法的对象。修改策略模式的配置类即可。 在之前策略模式基础上,修改如下 ?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.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
感觉php又难又简单
来自于 1970-01-01 08:00:00
0
0
0
javascript - 有没有简单的写法
来自于 1970-01-01 08:00:00
0
0
0
Laravel 如何打印简单的数组
来自于 1970-01-01 08:00:00
0
0
0
用MySQL计算中位数的简单方法
来自于 1970-01-01 08:00:00
0
0
0
谁能提供一个PHP简单的MVC实现的git地址?
来自于 1970-01-01 08:00:00
0
0
0
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板