zoukankan      html  css  js  c++  java
  • 设计模式学习(一)、策略模式

    1.策略模式的概念:

    定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变法独立于使用算法的客户。

    2.策略模式的结构图

    3.策略模式角色说明

    抽象策略(startegy)角色:定义了支持算法的公共接口。通常使用一个接口或者抽象来实现。环境(Context)角色使用这个接口调用具体策略(ConcreteStrategy)角色定义的算法。
    具体策略(ConcreteStartegy)角色:以抽象策略(Strategy)接口实现某具体算法。
    环境(Context)角色:持有一个Strategy类的引用,用一个ConcreteStrategy对象来配置。

    4.策略模式的实现

    比如说Joe公司模拟鸭子游戏,需要让鸭子飞(并非所有的鸭子都回飞),这种场景就可以使用策略模式实现:

    <?php
    /**
     * 策略模式实例
     */
    //抽象策略角色《为接口或者抽象类,给具体策略类继承》
    interface Strategy
    {
        public function fly();
    }
    
    //具体策略角色-用翅膀飞
    class FlyWithWings implements Strategy
    {
        public function fly()
        {
            echo 'fly with wings';
        }
    }
    
    //具体策略角色-不会飞
    class FlyNoWay implements Strategy
    {
    
        public function fly()
        {
            echo 'fly no way';
        }
    
    }
     //具体策略角色-坐热气球飞
    
     class FlyWithFireBubble implements Strategy
    {
    
        public function fly()
        {
            echo 'fly with fire bubble';
        }
    }
    class Duck
    {
        //
    }
    //环境角色实现类
    class SuperDuck extends Duck
    {
        //具体策略对象
        private $strategyInstance;
    
        //构造函数
        public function __construct()
        {
            $this->strategyInstance = new FlyWihtFireBubble();
        }
    
        public function fly()
        {
            return $this->strategyInstance->fly();
        }
    }
    
    //客户端使用
    $p = new SuperDuck();
    
    $p->fly();
  • 相关阅读:
    OpenCV && C++ 01
    图像矩的理解
    Halcon Example
    LabVIEW
    Working Experience
    Working Experience
    Working Experience
    C++
    Trigger,Cursor
    Paging
  • 原文地址:https://www.cnblogs.com/huixuexidezhu/p/5969961.html
Copyright © 2011-2022 走看看