代理模式
代理模式应用场景一般都是,一个类提供所有的功能,但是它对不同客户开放不同功能。一般这个时候我就用 if 了,但是为了更好的设计,让代码不至于一团糟,我还是用设计模式吧。代理模式通过设计功能类的代理类来达成不同访问权限的目的。
就拿腾讯视频为例,有免费电影、VIP电影以及用券电影。
class VideoSite
{
public:
virtual void free_movie() = 0;
virtual void vip_movie() = 0;
virtual void ticket_movie() = 0;
};
class TencentVideo:public VideoSite
{
public:
void free_movie() {
cout << "free movie" << endl; }
void vip_movie() {
cout << "vip movie" << endl; }
void ticket_movie() {
cout << "ticket movie" << endl; }
};
如果说,按照往常的想法,我们会在free_movie中传入用户的身份信息,然后判断用户是否能够有权限去看这个电影。这好么?这不好,年轻人耗子尾汁
腾讯视频类只是去提供视频服务的,其不该承担过多的业务。这个时候就需要一个代理,去判断用户身份:
class FreeVideoProxy :public VideoSite
{
public:
FreeVideoProxy() {
p_video_ = new TencentVideo(); }
~FreeVideoProxy() {
delete p_video_; }
void free_movie() {
p_video_->free_movie(); }
void vip_movie() {
cout << "id need upgrade" << endl; }
void ticket_movie() {
cout << "need buy tickets" << endl; }
private:
VideoSite* p_video_;
};
这样,用户都只是与代理类打交道,代理类在把信息传递给服务类去提供服务
参考文献
[1] 施磊.C++高级.图论科技.2020.7.