0

0

PHP策略模式

不言

不言

发布时间:2018-04-13 17:17:06

|

2205人浏览过

|

来源于php中文网

原创

本篇文章给大家分享的内容是关于PHP策略模式,有着一定的参考价值,有需要的朋友可以参考一下

例如:一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示不同的广告

6 项目应用

6.1 需求说明

    实现一个商场收银系统,商品可以有正常收费,打折收费,返利收费等模式(来之《大话设计模式》)


6.2 需求分析

    按照需求,可以将收费操作设计成为一个接口算法,正常收费,打折收费,返利收费都继承这个接口,实现不同的策略算法。然后设计一个环境类,去维护策略的实例。


6.3 设计架构图



6.4 程序源码下载

http://download.csdn.net/detail/clevercode/8700009

6.5 程序说明

1)strategy.php




[php] view plain copy

  1. _moneyRebate = $rebate;  
        }  
      
        /** 
         * 返回正常金额 
         * 
         * @param double $money 金额 
         * @return double 金额 
         */  
        public function acceptCash($money){  
            return $this->_moneyRebate * $money;  
        }  
    }  
      
    // 返利策略  
    class ReturnStrategy implements ICashStrategy{  
        // 返利条件  
        private $_moneyCondition = null;  
          
        // 返利多少  
        private $_moneyReturn = null;  
      
        /** 
         * 构造函数 
         * 
         * @param double $moneyCondition 返利条件 
         * @return double $moneyReturn 返利多少 
         * @return void 
         */  
        public function __construct($moneyCondition, $moneyReturn){  
            $this->_moneyCondition = $moneyCondition;  
            $this->_moneyReturn = $moneyReturn;  
        }  
      
        /** 
         * 返回正常金额 
         * 
         * @param double $money 金额 
         * @return double 金额 
         */  
        public function acceptCash($money){  
            if (!isset($this->_moneyCondition) || !isset($this->_moneyReturn) || $this->_moneyCondition == 0) {  
                return $money;  
            }  
              
            return $money - floor($money / $this->_moneyCondition) * $this->_moneyReturn;  
        }  
    }


2)   strategyPattern.php

立即学习PHP免费学习笔记(深入)”;

magento(麦进斗)
magento(麦进斗)

Magento是一套专业开源的PHP电子商务系统。Magento设计得非常灵活,具有模块化架构体系和丰富的功能。易于与第三方应用系统无缝集成。Magento开源网店系统的特点主要分以下几大类,网站管理促销和工具国际化支持SEO搜索引擎优化结账方式运输快递支付方式客户服务用户帐户目录管理目录浏览产品展示分析和报表Magento 1.6 主要包含以下新特性:•持久性购物 - 为不同的

下载





[php] view plain copy

  1. setCashStrategy($type);  
        }  
      
        /** 
         * 设置策略(简单工厂与策略模式混合使用) 
         * 
         * @param string $type 类型 
         * @return void 
         */  
        public function setCashStrategy($type){  
            $cs = null;  
            switch ($type) {  
                  
                // 正常策略  
                case 'normal' :  
                    $cs = new NormalStrategy();  
                    break;  
                  
                // 打折策略  
                case 'rebate8' :  
                    $cs = new RebateStrategy(0.8);  
                    break;  
                  
                // 返利策略  
                case 'return300to100' :  
                    $cs = new ReturnStrategy(300, 100);  
                    break;  
            }  
            $this->_strategy = $cs;  
        }  
      
        /** 
         * 获取结果 
         * 
         * @param double $money 金额 
         * @return double 
         */  
        public function getResult($money){  
            return $this->_strategy->acceptCash($money);  
        }  
      
        /** 
         * 获取结果 
         * 
         * @param string $type 类型 
         * @param int $num 数量 
         * @param double $price 单价 
         * @return double 
         */  
        public function getResultAll($type, $num, $price){  
            $this->setCashStrategy($type);  
            return $this->getResult($num * $price);  
        }  
    }  
      
    /* 
     * 客户端类 
     * 让客户端和业务逻辑尽可能的分离,降低客户端和业务逻辑算法的耦合, 
     * 使业务逻辑的算法更具有可移植性 
     */  
    class Client{  
      
        public function main(){  
            $total = 0;  
              
            $cashContext = new CashContext();  
              
            // 购买数量  
            $numA = 10;  
            // 单价  
            $priceA = 100;  
            // 策略模式获取结果  
            $totalA = $cashContext->getResultAll('normal', $numA, $priceA);  
            $this->display('A', 'normal', $numA, $priceA, $totalA);  
              
            // 购买数量  
            $numB = 5;  
            // 单价  
            $priceB = 100;  
            // 打折策略获取结果  
            $totalB = $cashContext->getResultAll('rebate8', $numB, $priceB);  
            $this->display('B', 'rebate8', $numB, $priceB, $totalB);  
              
            // 购买数量  
            $numC = 10;  
            // 单价  
            $priceC = 100;  
            // 返利策略获取结果  
            $totalC = $cashContext->getResultAll('return300to100', $numC, $priceC);  
            $this->display('C', 'return300to100', $numC, $priceC, $totalC);  
        }  
      
        /** 
         * 打印 
         * 
         * @param string $name 商品名 
         * @param string $type 类型 
         * @param int $num 数量 
         * @param double $price 单价 
         * @return double 
         */  
        public function display($name, $type, $num, $price, $total){  
            echo date('Y-m-d H:i:s') . ",$name,[$type],num:$num,price:$price,total:$total\r\n";  
        }  
    }  
      
    /** 
     * 程序入口 
     */  
    function start(){  
        $client = new Client();  
        $client->main();  
    }  
      
    start();  
      
    ?>

相关推荐:

实例分析PHP策略模式

PHP策略模式定义与用法实例详解

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

43

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

35

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

41

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

204

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

9

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

8

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.2万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号