热门标签 | HotTags
当前位置:  开发笔记 > 开放平台 > 正文

「策略模式」带你将营销收益最大化

 前言: 策略模式初学者很少听到,有时候遇到,但是却不清楚是使用该模式实现的功能,我看了一下百度,对这个模式的解释很生硬,其实简单的来说,什么是策略模式呢,比如你去淘宝上买东西,如


 前言: 策略模式初学者很少听到,有时候遇到,但是却不清楚是使用该模式实现的功能,我看了一下百度,对这个模式的解释很生硬,其实简单的来说,什么是策略模式呢,比如你去淘宝上买东西,如果你是男生,它的首页会给你推荐男生喜欢的物品,如果你是女生呢,它会给你推荐女生常用的物品,就感觉啊,这个东西是有生命一样,他知道你是什么样的一类人 。还有就是,比如你在朋友圈经常看到官方推送的一些广告  ,如果你是白羊座,他上面就会显示白羊座用这个东西多好多好,如果你是其他星座,就会发现它显示的是其他星座了 。所以这时候用官方的语言概括来说,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于策略模式。这个时候是不是容易理解了很多

目录

一、策略模式的由浅入深 

 二、策略模式的实际应用





一、策略模式的由浅入深 


  • 由上面可知,编程中的策略模式,就是会知道你是什么人,然后给你推荐你喜欢的东西,让营销最大化
  • 这里必然涉及到,程序在运行的时候,给你这个人进行分门别类,然后执行了不同的方法导致的
  • 这里我们定义两个类,拥有相同的方法,执行的内容却不同
  • 策略模式需要做的就是当用户进来时候,同一个入口让他根据这个人的行为去执行其中某一个类中的方法

/**
* Class A
*/
class A {
public function name()
{
echo "我是A类";
}
}
/**
* Class B
*/
class B {
public function name()
{
echo "我是B类";
}
}
/**
* Class strategy
*/
class strategy
{
/**
* @var $obj
*/
private $obj;
/**
* @return mixed
*/
public function getName()
{
return $this->obj->name();
}
/**
* @param $class
*/
public function setClass($class)
{
$this->obj = $class;
}
}
$strategy = new strategy();
//分门别类
$strategy->setClass(new B());
//同一个入口
$strategy->getName();

  • 结果

我是B类

 二、策略模式的实际应用


  • 在了解了策略模式的原理之后,在平时的应用场景是什么呢
  • 我这里以情景: 一个用户去某酒店网站定住宿为例,页面上根据你的历史消费记录,会为你显示高等住宿和丰富的晚餐,或者仅仅显示大众住宿和廉价的自助餐
  • 我们先定义接口去实现住房和晚餐的方法
  • 然后定义两个群里的类去实现这个接口,分别是尊贵的人群和普通的人群
  • 当有个autofelix用户去订房间,给他注入大众用户的类

/**
* Interface userStrategy
*/
interface userStrategy
{
public function hotel();
public function dinner();
}
/**
* 尊贵的客人享有的待遇
* Class rich
*/
class rich implements userStrategy
{
public function hotel()
{
return "你是高贵的客人,为你推荐了高级住宿";
}
public function dinner()
{
return "你是高贵的客人,为你推荐了烛光晚餐";
}
}
/**
* 普通的客人享有的待遇
* Class poor
*/
class poor implements userStrategy
{
public function hotel()
{
return "你是普通的客人,为你推荐了大众住宿";
}
public function dinner()
{
return "你是普通的客人,为你推荐了自助餐";
}
}
/**
* Class user
*/
class user
{
private $_userClass;
public function getHotel() {
return $this->_userClass->hotel();
}
public function getDinner() {
return $this->_userClass->dinner();
}
public function setUserClass(userStrategy $userStrategy) {
$this->_userClass = $userStrategy;
}
}
/**
* 这时候有个autofelix用户过来网站预定房间
* Class autofelix
*/
class autofelix extends user {}
$people = new autofelix();
//设置群体
$people->setUserClass(new poor());
//获取该群体的住宿和晚餐
$hotel = $people->getHotel();
$dinner = $people->getDinner();
echo json_encode([
'hotel' => $hotel,
'dinner' => $dinner
]);

  • 结果

{
hotel: "你是普通的客人,为你推荐了大众住宿",
dinner: "你是普通的客人,为你推荐了自助餐"
}

 



推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • Windows 系统下 MySQL 8.0.11 的安装与配置
    本文详细介绍了在 Windows 操作系统中安装和配置 MySQL 8.0.11 的步骤,包括环境准备、安装过程以及后续配置,帮助用户顺利完成数据库的部署。 ... [详细]
  • 在Windows系统上安装VMware Workstation 2022的详细步骤
    本文将详细介绍如何在Windows系统上安装VMware Workstation 2022。包括从官方网站下载软件、选择合适的版本以及安装过程中的关键步骤。此外,还将提供一些激活密钥供参考。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文详细介绍了K-Medoids聚类算法,这是一种基于划分的聚类方法,适用于处理大规模数据集。文章探讨了其优点、缺点以及具体实现步骤,并通过实例进行说明。 ... [详细]
  • 本文探讨如何利用人工智能算法自动区分网页是详情页还是列表页,介绍具体的实现思路和技术细节。 ... [详细]
author-avatar
mobiledu2502910233
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有