一个PHP设计模式的问题(工厂类)

帖子列表 发布于 2013/04/16 16:02
阅读 340
收藏 0
PHP

现在我有两个log类,一个a.class.php, 一个b.class.php,如果配置设置了使用a类,那么就用a来写日志,b同理。但是,a的写日志方法是a($var),但b的写日志方法是new b($var); 。 而且,a类有z1,z2方法,用于定制化写日志的,但b类没有z1 ,z2的同名方法。

如何统一使用一种写日志方法,不管用的是a还是b日志类,而且,让b类也在一定程度支持z1,z2方法。

这种情况应该用工厂类吧? 可是如何处理我说的问题呢?

加载中
0
hylent
hylent
adapter更好些吧 先规定一个接口  然后分别把a和b类分别当成adaptee 实现  然后再对adapters 进行 factory
hylent
hylent
接口是共性 是对外的 写日志的话 用不了20+方法吧 适配器也不是要把被适配者的方法都适配了 只要需要的就好啊
帖子列表
帖子列表
可是我现在a类有比如20个方法,b类有20个方法,这40个方法各不相同,要规定接口岂不是太罗嗦了
0
陨落人间
陨落人间

是不是要这样的。

<?php
/**
 * 类的中间层
 *
 */
logClass::getInstance('a', array('xxx'=>$kkk));


class logClass{
 
   protected $options = array();
   
   
    /**
     * 根据参数log a, 或b ,并实例化
     * @param string $type
     * @param array $options
     */
    public static function getInstance($type='', $options=array()){
         $type = (empty($type)) ? 'a' : $type;
         $class = 'log'.ucfirst($type);
         if(!class_exists($class))
         {
             throw_exception(L('class.not.exists', array($class, 'getInstance')));
         }
         $log_class = new $class($options);
         return $log_class;
    }
    

 
}

返回顶部
顶部