PHP策略模式1
2024-09-25 13:46:03
【IUser.php】
<?php
/**
* 策略模式
* 将一组特定的行为和算法封装成类,用来适应某些特定的上下文环境,实现从硬编码到解耦
* 应用举例:电商系统针对不同性别跳转到不同的商品类目,并展示不同的广告信息和商品信息
*/ /**
* 定义用户的接口
*/
interface IUser
{
//展示广告信息
public function showAds(); //展示商品信息
public function showGoods();
}
【FemaleUser.class.php】
<?php /**
* 策略模式 -- 女性用户的策略
*/
require_once 'IUser.php'; class FemaleUser implements IUser
{
public function showAds()
{
return '女性用户的广告信息';
} public function showGoods()
{
return '面膜';
}
}
【MaleUser.class.php】
<?php /**
* 策略模式 -- 男用户的策略
*/
require_once 'IUser.php'; class MaleUser implements IUser
{
public function showAds()
{
return '男性用户的广告信息';
} public function showGoods()
{
return 'iphone6s';
}
}
【Strategy.class.php】
<?php
/**
* 策略模式的具体实现方法
*/ require_once 'interface/IUser.php';
require_once 'interface/FemaleUser.class.php';
require_once 'interface/MaleUser.class.php'; class Strategy
{
protected $strategy; function show(){
$res = '广告:'.$this->strategy->showAds().'<br>';
$res .= '商品:'.$this->strategy->showGoods().'<br>';
return $res;
} function setStrategy(IUser $stra)
{
$this->strategy = $stra;
}
}
【调用】
////【策略模式】
$celue = new Strategy();
$gender = 'female'; //假设现在是女性
if ($gender == 'female') {
$straObj = new FemaleUser();
} else {
$straObj = new MaleUser();
}
$celue->setStrategy($straObj);
echo $celue->show();
最新文章
- dedecms中调用制定栏目
- 文本框如果不输入任何内容提交过后是一个空字符串还是null
- java代码运行linux shell操作
- Java线程池的实现
- maven pom.xml解释 (转)
- Unix/Linux 脚本中 “set -e” 的作用
- jquery属性选择器之 attr
- jenkins配置角色访问
- andorid 开放工具集合
- hibernate学习手记(1)
- 每天学一点Docker(3)(制作你的第一个容器)
- Android TV开发总结(二)构建一个TV Metro界面(仿泰捷视频TV版)
- ASP.Net笔记整理(一)
- LeetCode——翻转数字
- jQuery 实现文字不停闪烁效果
- 用java语言构建一个网络服务器,实现客户端和服务器之间通信,实现客户端拥有独立线程,互不干扰
- Flask最强攻略 - 跟DragonFire学Flask - 第九篇 Flask 中的蓝图(BluePrint)
- 关于JS历史
- unity中鼠标按下加速漫游,鼠标抬起减速漫游。
- Python 字符串中 startswith()方法