php设计模式

1.工厂模式

在处理对应多平台支付的业务问题的时候,

在page层通过不同的type调用data层不用平台的支付逻辑。

secure_base.clase.php作为父类实现分发和type的定义和公共方法构造等,可以自行设计。

              switch($source) {
                case Secure_Base::xxx:
                    $obj = new Secure_xx();
                    break;
                case Secure_Base::xxxxx:
                    $obj = new Secure_xxx();
                    break;
                case Secure_Base::xxxxx:
                    $obj = new Secure_xxx();
                    break;
     
                case Secure_Base::ROSE:
                    $obj = new Secure_xx();
                    break;



总结:多用于同一入口 对应多后端逻辑业务,起到一个分发的作用。


2.解释器模式

在page层对返回的数据的数字与汉子对应实现,数字类型与汉子解释的对应,同一方法统一维护 方便配置和文档的总结

Dome:

    class ExpressionNum extends Expression
    {
        function interpreter($str)
        {
            switch($str)
            {
                case"0":return"零";
                case"1":return"一";
                case"2":return"二";
                case"3":return"三";
                case"4":return"四";
                case"5":return"五";
                case"6":return"六";
                case"7":return"七";
                case"8":return"八";
                case"9":return"九";
            }
        }
    }

总结:在数据返回时经常用到,把数值类型的值转换成展示的汉字并且统一管理。

3.外观模式

在date层调用dao层的时候,采用的外观模式,把需要用到的数据表类实例化后统一使用并封住成模型,提供给page层调用。

    class Facade
    {
        private$_object1=null;
     
        public function __construct()
        {
            $this->_object1=new SubSytem1();
        }
        public function MethodA(){
            $this->_object1->Method1();
        }
    }
     
    <pre name="code" class="php">class SubSytem1
    {
        public function Method1()
    {
        echo"subsystem1method1<br/>";
    }
    }



总结:在框架底层架构的时候可以用来做完数据层的链接,特别是数据模型的构建。

4.建造者模式

在写爬虫的时候应用的设计模式,通过设置成员属性,调用方法时实现不同的检测,最常用的就是debug模式 $obj->setDebug(1);

通过相应的set函数写入不同配置,从而实现功能。

    $config=array(
        "type"=>"shirt",
        "size"=>"xl",
        "color"=>"red",
    );
     
    //没有使用bulider以前的处理
    $oProduct=new Product();
    $oProduct->setType($config['type']);
    $oProduct->setSize($config['size']);
    $oProduct->setColor($config['color']);


总结:可以用来检测钩子,通过钩子函数来实现检测不同的设置,实现不同功能或者丰富原有的功能。例如setHeaser,setCookie,setDebug等

5.装饰模式
在抛出错误的时候通过装饰模式来实现返回不同格式的错误消息
---------->ps.编码时尽量自己抛出错误来冗错并且一定要记录相应log用来调试,在写底层框架的时候错误抛出的策略一定要规划好。
现在对Exception进行封装和改造实现自定义log和返回自定义err消息,也可以配置应用的错误代码映射conf实现code和msg
可以在构造函数的时候通过type调用相应的修饰方法(过滤html,转义json,xml等等)
Dome:

    abstract class MessageBoardHandler
    {
        public function __construct(){}
        abstract public function filter($msg);
    }
     
    class MessageBoard extends MessageBoardHandler
    {
        public function filter($msg)
        {
            return "tttttt|".$msg;
        }
    }
    <pre style="color:#000000;font-family:'Menlo';font-size:9.0pt;"><pre name="code" class="php">class MessageBoard2 extends MessageBoardHandler
    {
        public function filter($msg)
        {
            return "xxxxxx|".$msg;
        }
    }



$obj=new MessageBoard();echo$obj->filter("一定要学好装饰模式<br/>");

总结:在对于抛出提示信息的时候实现多元化的应用而不是单一的返回方式,用来支撑不同的数据需要。

posted @ 2019-02-12 18:10  张富  阅读(230)  评论(0编辑  收藏  举报
levels of contents