zoukankan      html  css  js  c++  java
  • PHP 策略模式

    策略模式:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。策略模式把对象本身和运算规则区分开来,其功能非常强大,因为这个设计模式本身的核心思想就是面向对象编程的多形性的思想。

    也就是我们打算出行旅游,我们可以有几个策略可以考虑,可以骑自行车,汽车,做火车,飞机。

    【策略模式中主要角色】

    环境类(Context):用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。(出去旅游(接口类或抽象类)必须考虑交通工具,交通工具要考虑时间(接口类或抽象类要实现的方法),费用等问题)
    抽象策略类(Strategy):定义所有支持的算法的公共接口。 Context使用这个接口来调用某ConcreteStrategy定义的算法。(环境类的实现,选择交通工具范围,火车,飞机,自行车。。。)
    具体策略类(ConcreteStrategy):以Strategy接口实现某具体算法。(给出我们选择交通方式的信息)

    【策略模式PHP示例】

    # 环境类(Context)
    interface TravelTool{
        public function useTime();
        public function money();
    }
    
    # 抽象策略类(Strategy)
    
    class Plane implements TravelTool {  # 飞机
        public function useTime()
        {
            return  '1 h';
        }
    
        public function  money()
        {
            return '$10';
        }
    }
    
    class Train implements TravelTool {  # 火车
        public function useTime()
        {
            return  '3 h';
        }
    
        public function  money()
        {
            return '$5';
        }
    }
    
    # 具体策略类(ConcreteStrategy)
    
    class doTravel{
        public $obj;
    
        public function __construct($method)
        {
            $temp = new ReflectionClass($method);     # 看到别的博客用了反射就学习了一下 http://www.php.net/manual/zh/book.reflection.php
            $this->obj = $temp->newInstance();
        }
    
        public function money(){
            echo $this->obj->money();
        }
    
        public function useTime(){
            echo $this->obj->useTime();
        }
    }
    
    $obj = new doTravel('Train');
    $obj->money();
    echo "<br/>";
    $obj->useTime();
    

      关于更详细的内容(优点,缺点,适用性)看这里  转载于http://www.howzhi.com/group/php/discuss/3456

  • 相关阅读:
    四,redis6版本的使用部署
    记录篇-浪潮服务器raid卡
    sudo漏洞解决方案--源码转rpm包(spec文件编写)
    关闭 Chrome 浏览器阅读清单功能
    【转译】如何成为一个数据工程师?
    Python 用最小堆获取大量元素 topk 大个元素
    Python 实现二分查找
    Python 排序算法之堆排序,使用 heapq 实现
    Python 排序算法之归并排序
    Python 排序算法之快速排序
  • 原文地址:https://www.cnblogs.com/moxiaoan/p/6233754.html
Copyright © 2011-2022 走看看