zoukankan      html  css  js  c++  java
  • php设计模式-策略模式

    PHP策略模式

    1、什么是策略模式?

    定义:将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,并让它们可以相互替换,这种模式就是策略模式。

    简单理解就是 有n个做法供你选择,根据你的需要选择某个策略得到结果

    2、为什么要用策略模式?

    使用设计模式之后,我们的代码冗余和耦合度变低,每个策略模块完成对应的功能

    当然缺点就是一个功能我们就要响应制作一个策略类,但是我们统观MVC架构当中(ThinkPHP,Yii2),一个控制器对应一个视图,其实也是策略设计模式的体现了。

    3、示例代码

    业务场景

    在一个电商网站中,根据用户的性别来展示不同的商品。我们有展示商品的类目(function showCategory())和展示的广告(function showAd())

    实现方式

    首先我们要定义一个接口,接口中定义需要实现的方法。

    然后分别定义不同的类来实现接口中的方法。

    最后在根据用户的不同,分别 new 不同的方法。

    /**
     * @purpose: 父类接口
     * Interface UserInterface
     */
    interface UserInterface
    {
        /**
         * @purpose: 展示广告
         * @return mixed
         */
        public function showAd();
    
        /**
         * @purpose: 展示商品分类
         * @return mixed
         */
        public function showCatetory();
    }
    
    /**
     * @purpose: 男性用户实现用户接口
     * Class MaleUser
     */
    class MaleUser implements UserInterface
    {
        /**
         * @purpose: 展示广告
         * @return mixed
         */
        public function showAd()
        {
            echo "电子产品";
        }
    
        /**
         * @purpose: 展示商品分类
         * @return mixed
         */
        public function showCatetory()
        {
            echo "电脑数码";
        }
    }
    
    /**
     * @purpose: 女性用户实现用户接口
     * Class FemaleUser
     */
    class FemaleUser implements UserInterface
    {
        /**
         * @purpose: 展示广告
         * @return mixed
         */
        public function showAd()
        {
            echo "化妆品";
        }
    
        /**
         * @purpose: 展示商品分类
         * @return mixed
         */
        public function showCatetory()
        {
            echo "服装分类";
        }
    }
    
    if ($_GET['male']){
        $user = new MaleUser();
    } else {
        $user = new FemaleUser();
    }
    $user->showAd();  //会根据用户的性别展示各自的广告内容

    4、小结

    总的来说,我们在开发中的设计原则如下:

    • 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起;
    • 针对接口编程,不针对实现编程;
    • 多用组合,少用继承。

    本文为袋鼠学习中的总结,如有转载请注明出处:https://www.cnblogs.com/chrdai/p/11184082.html

  • 相关阅读:
    Nginx部署部分https与部分http【转】
    MySQL指定使用某个索引查询语句
    MySQL创建相同表和数据命令
    Apache+jboss群集部署
    运维小知识之nginx---nginx配置Jboss集群负载均衡
    SSL证书生成方法【转】
    Nginx搭建https服务器
    基于OpenSSL实现C/S架构中的https会话
    OnlineJudgeServer运行
    百科知识 isz文件如何打开
  • 原文地址:https://www.cnblogs.com/chrdai/p/11184082.html
Copyright © 2011-2022 走看看