zoukankan      html  css  js  c++  java
  • PHP中实用的模式之【门面模式】

           author:胡旭个人博客

           blog:http://www.ihuxu.com

           欢迎关注~~~~

            对于一些逻辑稍微复杂的程序,很难避免出现在不某个类中无法访问另一个类所持有的引用。这样也就导致了编程的灵活度下降,尽管可以再次创建新的引用,也会浪费资源,甚至达不到要求。下面我来句一个例子:

            比如,后台的模板文件有两个。admin_bar.html,和admin_comment.html。我现在有两个类,分别是adminAction.class.php,和adminCommentAction.class.php。admin_bar.html文件就是我们通常看到的后台管理的工具栏(通常在左边),admin_comment.html是每个工具功能项(评论)所对应的内容。如下图所示:

            这样,我们在adminAction控制器类中先用模板引擎处理好admin_bar.html文件,完了根据url或表单传进来的参数进入到adminCommentAction控制器类。代码示例:

            

     1 <?php
     2 class adminAction{
     3         
     4         private $smarty = null;
     5         
     6         public function _construct(){
     7             $this->smarty = new Smarty();
     8             
     9         }
    10         
    11         private function show(){
    12             $this->smarty->dispose('admin_bar.html');
    13             if($_GET['action'] == 'comment'){
    14                 new adminCommentAction();
    15             }
    16             if(){
    17                 //...
    18             }
    19             return;
    20         }
    21 }
    22 
    23 class adminCommentAction{
    24     public function _construct(){
    25         //???
    26     }
    27 }

            那么,到代码执行到adminCommentAction中时,就无法拿到adminAction中持有的smarty引用了。也许说,可以通过构造参数来传递,不过这里介绍一种更好的方式 --- 门面模式(总于进入主题了)。它能够更灵活的管理代码程序中的饮用对象。下面简单的门面模式类代码示例:

     1 <?php
     2 /**
     3  * 对象引用管家 - 门面模式
     4  */
     5 class ObjectManager implements ObjectType{
     6     private static $Objects = array();
     7     
     8     public static final function get_object($key){
     9         
    10         if(array_key_exists($key, ObjectManager::$Objects)){
    11             return ObjectManager::$Objects[$key];
    12         }
    13         return FALSE;
    14     }
    15 
    16     public static final function set_object($key, $Object){
    17         if(!array_key_exists($key, ObjectManager::$Objects)){
    18             ObjectManager::$Objects[$key] = $Object;
    19             return TRUE;
    20         }
    21         return FALSE;
    22     }
    23     
    24     public static final function clear_object($key){
    25         if(array_key_exists($key, ObjectManager::$Objects)){
    26             unset(ObjectManager::$Objects[$key]);
    27             return TRUE;
    28         }
    29         return FALSE;
    30     }
    31 }

            当然,最好给ObjectManager写一个接口类,其中存一些引用的类型,以便处理。

    <?php
    /**
     * 全局对象引用类型常量接口
     *
     */
    interface ObjectType{
        
        /**
         * 后台控制器adminAction所持有的Smarty引用对象,其用于相应模板文件的模板引擎动作。
         * 
         */
        const ADMINACTIONENGIEN= 'AdminActionEngien';
        
        
    }

            那么这个时候就可以这样灵活的运用了,代码示例:

     1 <?php
     2 class adminAction{
     3         
     4         private $smarty = null;
     5         
     6         
     7         public function _construct(){
     8             $this->smarty = new Smarty();
     9             ObjectManager::set_object(ObjectManager::ADMINACTIONENGIEN, $this->smarty);
    10         }
    11         
    12         private function show(){
    13             $this->smarty->dispose('admin_bar.html');
    14             if($_GET['action'] == 'comment'){
    15                 new adminCommentAction();
    16             }
    17             if(){
    18                 //...
    19             }
    20             return;
    21         }
    22 }
    23 
    24 class adminCommentAction{
    25     private $smarty = null;
    26     public function _construct(){
    27         $this->smarty =  ObjectManager::get_object(ObjectManager::ADMINACTIONENGIEN);
    28         $this->smarty->require_file();//这个函数可能smarty没有,因为我用的引擎是自己写的
    29         $this->smarty->assign();
    30         $this—>smarty->display();
    31     }
    32 }
  • 相关阅读:
    软件测试技术实战 设计、工具及管理(51Testing软件测试网作品系列)
    MATLAB智能算法超级学习手册
    HTML与CSS入门经典(第9版)
    深入理解Android 5 源代码
    中文版Dreamweaver CS6基础培训教程(第2版)
    可用性测试手册(第2版)
    网络综合布线系统与施工技术第4版
    PHP核心技术与最佳实践(第2版)
    [OC Foundation框架
    [OC Foundation框架
  • 原文地址:https://www.cnblogs.com/wuniaoheart/p/menmianmoshi.html
Copyright © 2011-2022 走看看