设计模式,如何让缓存类和微信类互相独立

原来有两个类,开启缓存后实例化userCache类,未开启缓存实例化user类,分别调用一系列各自操作

 class userCache{
    public function addUser(){
        //添加用户到数据库更新缓存  
    }
}
 class user{
    public function getUser(){
        //添加用户到数据库
    }
}

现在又多出来一个区分,微信端会有不同的处理,比如在微信端添加用户,需要给用户回复模板消息

 class userCache{
    public function addUser(){
        //添加用户到数据库更新缓存
        if(web 端){
            发送站内信
        }else(微信端){
            发送模板消息给关注用户
        }   
    }
}
 class user{
    public function addUser(){
        //添加用户到数据库
        if(web 端){
            发送站内信
        }else(微信端){
            发送模板消息给关注用户
        }   
    }
}

该怎么样设计让缓存和微信类互相独立,没有关系,不要套在一起,或者说怎么不改变原有类的代码,实现现在功能


class userWeixin{
    protected $handler;
    public function __construct($handler){
        $this->handler = $handler;
    }

    public function addUser(){
        $this->handler->addUser();
        //发送模板给关注用户
    }

} 
//调用
if(开启缓存 and 客户端是微信){
    $uer = new userWeixin(new userCache());
}else if(关闭缓存 and 客户端是微信){
    $uer = new userWeixin(new user());
}else if(开启缓存 and 客户端不是微信){
    $user = new userCache();
}else if(关闭缓存 and 客户端不是微信){
    $user = new user();
}

这样好像可以,可是回头想想,如果现在又添加网易云信,需要判断,如果网站开启了网易云信,及时给用户发送一条消息,又怎么做呢?

还有,如果userweixin微信类产生的数据,和普通User类产生的数据不一样,需要缓存的数据也就不一样,那么第二个实现好像就不行了,该怎么敏捷的实现这个问题呢