Python和PHP之策略模式

    在项目开发的过程中经常会遇到很多有关if else的判断,采用策略模式可以可以替换这种繁杂的逻辑判断,而且便于项目的维护和扩展,降低在项目中的代码耦合性!
Python篇:
# -*- coding:utf-8 -*-
__author__ = 'yxq'

'''
  策略模式:替代多层的if else条件判断
  
'''
bigProductUrlPrefix = 'http://ip/'
smallProductUrlPrefix = 'http://ip/public/index.php/'

'''
定义一个抽象类
'''
class FetchUrl(object):
    def geturl(self,*param):
        pass
#获取大产品url
class FetchBigUrl(FetchUrl):
    def geturl(self,*param):
        param = parma.split(',')
        return bigProductUrlPrefix+ param[0] + "?"+param[1]+"?"+param[2]

#获取小产品url
class FetchSmallUrl(FetchUrl):
    def geturl(self,*param):
        param = parma.split(',')
        return smallProductUrlPrefix+ param[0] + "?"+param[1]+"?"+param[2]

#获取小产品url
class FetchOldUrl(FetchUrl):
    def geturl(self,*param):
        param = parma.split(',')
        return smallProductUrlPrefix+ param[0] + "?"+param[1]+"?"+param[2]

#获取实例
class GetContent(object):
    def __init__(self,obj):
        self.obj = obj
    def getUrl(self,*param):
        return self.obj.geturl(param)

if __name__ == '__main__':
    parma = input("请输入参数:")
    if len(parma.split(',')) != 3:
        print("传输的参数个数不对,请确认后在提交")
    allUrl = []
    # resultUrl = GetContent(FetchBigUrl())
    resultUrl = GetContent(FetchSmallUrl())
    print(resultUrl.getUrl(parma))

PHP篇:

<?php
    #抽象策略接口
    interface FetchUrl{
        public function getUrl();
    }

    #或者定义一个抽象类 

   abstract class FetchUrl{

     public function getUrl();

   }
    #具体算法类 实现具体的事情
    class FetchBigUrl implements FetchUrl{
        public function getUrl(){
            echo "Big";
        }
    }

    class FetchSmallUrl implements FetchUrl{
        public function getUrl(){
            echo "Small";
        }
    }
    
    #配置类  使用抽象策略接口配置
    class GetContent{
        public $config;

        public function __construct(FetchUrl $obj){
            $this->config = $obj;
        }

        public function execute(){
            return $this->config->getUrl();
        }
    }

    $m = new GetContent(new FetchBigUrl());
    $m->execute();


   #单例模式  确保类只有一个实例
   class Single{

          #定义一个静态变量
          public static $instance;

          #私有构造方法
          public function __construct(){}
          #声明一个静态方法
          public static function getInstance(){
                 if(!self::$instance){
                self::$instance = new self();
                 }
                 return self::$instance;
          }
          #防止克隆
          private function __clone(){}
   }


   var_dump(Single::getInstance());
   var_dump(Single::getInstance());
   exit;

 

    #注册模式解决全局共享和交换对象
    class Register
    {
        protected static  $objects;//全局树  array
     
        //设置
        static function set($alias,$object)
        {
            self::$objects[$alias] = $object;
        }
        //获得
        static function get($alias)
        {
            return self::$objects[$alias];
        }
        //注销
        static function _unset($alias)
        {
            unset(self::$objects[$alias]);
        }
    }
     
    Register::set('conf',array('dbhost'=>'127.0.0.1'));
    print_r(Register::get('conf'));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
策略模式是一种行为型设计模式,它允许你定义一系列算法,将每个算法封装起来,并且使它们可以互相替换。在使用策略模式时,你可以根据不同的需求,动态地切换算法。 在Python中,可以通过定义不同的函数或类来实现策略模式。下面是一个使用函数的示例: ```python def add(a, b): return a + b def subtract(a, b): return a - b def multiply(a, b): return a * b def divide(a, b): if b == 0: return "Error: division by zero" else: return a / b class Calculator: def __init__(self, strategy): self.strategy = strategy def execute(self, a, b): return self.strategy(a, b) calculator = Calculator(add) print(calculator.execute(2, 3)) # Output: 5 calculator.strategy = subtract print(calculator.execute(2, 3)) # Output: -1 calculator.strategy = multiply print(calculator.execute(2, 3)) # Output: 6 calculator.strategy = divide print(calculator.execute(2, 0)) # Output: Error: division by zero ``` 在上面的代码中,我们定义了四个函数,分别实现加法、减法、乘法和除法运算。然后我们定义了一个Calculator类,它有一个execute方法,接受两个参数a和b,然后调用strategy函数来执行对应的运算。 最后我们创建了一个Calculator对象,并将add函数作为策略传递给它。然后我们调用execute方法来执行加法运算。 接着我们动态地切换了策略,将subtract、multiply和divide函数依次作为策略传递给Calculator对象,并调用execute方法来执行对应的运算。 这就是一个简单的策略模式的示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值