【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();

最新文章

  1. dedecms中调用制定栏目
  2. 文本框如果不输入任何内容提交过后是一个空字符串还是null
  3. java代码运行linux shell操作
  4. Java线程池的实现
  5. maven pom.xml解释 (转)
  6. Unix/Linux 脚本中 “set -e” 的作用
  7. jquery属性选择器之 attr
  8. jenkins配置角色访问
  9. andorid 开放工具集合
  10. hibernate学习手记(1)
  11. 每天学一点Docker(3)(制作你的第一个容器)
  12. Android TV开发总结(二)构建一个TV Metro界面(仿泰捷视频TV版)
  13. ASP.Net笔记整理(一)
  14. LeetCode——翻转数字
  15. jQuery 实现文字不停闪烁效果
  16. 用java语言构建一个网络服务器,实现客户端和服务器之间通信,实现客户端拥有独立线程,互不干扰
  17. Flask最强攻略 - 跟DragonFire学Flask - 第九篇 Flask 中的蓝图(BluePrint)
  18. 关于JS历史
  19. unity中鼠标按下加速漫游,鼠标抬起减速漫游。
  20. Python 字符串中 startswith()方法

热门文章

  1. Android Studio开发第二篇创建新项目
  2. 【!Important】如何保证线程执行的先后顺序
  3. NHibernate中Session的处理 线程不安全
  4. 【BZOJ2671】Calc 数学
  5. Web 通信 之 长连接、长轮询(long polling)(转载)
  6. SPL标准库-数据结构
  7. Ingeter与int的比较
  8. h5 . css入门 2.CSS基础
  9. Flask web开发之路六
  10. js中if语句的几种优化代码写法