文章目录

代理模式

代理模式应用场景一般都是,一个类提供所有的功能,但是它对不同客户开放不同功能。一般这个时候我就用 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.