zoukankan      html  css  js  c++  java
  • 简单工厂模式和策略模式结合使用php

    策略模式是有客户端自行实例化算法类的,而简单工厂模客户端只传参数,不关心对象的生成。

    结合两种模式,可以在使用策略模式的时候客户端不再生成算法的对象。修改策略模式的配置类即可。

    在之前策略模式基础上,修改如下

    <?php
    /*
     * 策略模式:定义一系列算法,并且把每一个算法封装起来,并且使它们可以相互替换
     * 策略模式使得算法可以独立于使用它的客户而变化
     */
     
     
    //抽象策略接口,完成某件事情
    interface category{
        public function dosomething();
    }
     
    //具体算法类,实现具体的事情
    class category_a implements category{
        public function dosomething(){
            echo 'do A';
        }
    }
     
    class category_b implements category{
        public function dosomething(){
            echo 'do B';
        }
    }
     
    class category_c implements category{
        public function dosomething(){
            echo 'do C';
        }
    }
    
    class handel_error implements category{
    	public function dosomething(){
    		echo 'wrong param';
    	}
    }
    //配置类,使用抽象策略接口来配置
    class context{
        public $cg;
         
        public function __construct($a){//构造函数实现了工厂方法
            switch ($a){
            	case 'a': $this->cg = new category_a();break;
            	case 'b': $this->cg = new category_b();break;
            	case 'c': $this->cg = new category_c();break;
            	default: $this->cg = new handel_error();break;
            }
        }
         
        public function dodo(){
            return $this->cg->dosomething();//同一方法作用于不同类的对象,产生不同的结果,这在php中就是多态
        }
    }
     
    //客户端调用,由客户自己决定使用哪种策略,即客户自行实例化算法类。区别于简单工厂模式
    //简单工厂模式是对象的创建模式,客户端不创建对象,只给出参数,由工厂方法来决定创建哪一个实例
    //也就是说,简单工厂模式客户端只传参数,策略模式客户端传算法实例
    $m = new context('b');
    $m->dodo();
    ?>
    

      

  • 相关阅读:
    mysql 安装命令
    MySQL——修改root密码的4种方法(以windows为例)
    正则表达式(一):php常用的正则匹配
    nginx+php在调试过程中临时关闭缓存
    (总结)Nginx配置文件nginx.conf中文详解
    理解Linux系统/etc/init.d目录和/etc/rc.local脚本
    关于mongodb ,redis,memcache之间见不乱理还乱的关系和作用
    angularjs factory,service,provider 自定义服务的不同
    使用loopback创建nodejs框架
    采用express创建nodejs服务器
  • 原文地址:https://www.cnblogs.com/taijun/p/4026918.html
Copyright © 2011-2022 走看看