本次代码符合PHP规范PRS_0,根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录),统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)
index.php 公共部分
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
Loader.php
<?php
namespace Frame;
class Loader
{
static function autoload($class)
{
require BASEDIR.'/'.str_replace('\\','/',$class).'.php';
}
}
策略模式
- 现在模拟这样一个场景,一个商城针对不同的人群推荐展现不同的商品。(女性推荐展示化妆品、男性推荐展示电子产品)
一般的编码方法
在index.php中写入
<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
class Page
{
//$_GET 传female为女性推荐展示
public function index()
{
if (isset($_GET['female'])) { //如果突然增加了几个展示类型,
//岂不是要写很多if else ,如果很多地方都有这种代码,修改起来真的太糟糕了,而且容易遗漏。
//女性
} else {
//男性
}
}
}
$page = new Page();
$page->index();
策略模式编码,首先声明一个UserStrategy接口来约束策略类
<?php
namespace Frame;
interface UserStrategy
{
public function showAd();//展示广告
public function showCategory();//展示分类
}
创建用于展示女性推荐展示化妆品的FemaleUserStrategy类文件实现UserStrategy接口
<?php
namespace Frame;
class FemaleUserStrategy implements UserStrategy
{
public function showAd()
{
echo "2019最火爆保水面膜";
}
public function showCategory()
{
echo "化妆品";
}
}
创建用于男性推荐展示电子产品的FemaleUserStrategy类文件实现UserStrategy接口
<?php
namespace Frame;
class MaleUserStrategy implements UserStrategy
{
public function showAd()
{
echo "1+ 11 plus 手机";
}
public function showCategory()
{
echo "手机";
}
}
在index.php中写入
<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
class Page
{
protected $strategy;
public function index()
{
echo "AD:";//用于展示广告
$this->strategy->showAd();
echo "<br />";
echo "category:";//用于展示分类
$this->strategy->showCategory();
}
//设置策略对象
public function setStrategy(\Frame\UserStrategy $strategy)
{
$this->strategy = $strategy;
}
}
$page = new Page();
if (isset($_GET['female'])) {//女性
$strategy = new \Frame\FemaleUserStrategy();
} else {//男性
$strategy = new \Frame\MaleUserStrategy();
}
$page->setStrategy($strategy);
$page->index();
One comment
策略模式
1.策略模式,将一组特定的行为和算法封装成类,以适应某些
特定的上下文环境,这种模式就是策略模式
2.实际应用举例,假如一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示不同的广告
3.使用策略模式可以实现Ioc ,依赖倒置、控制反转