模式思想
简介
代理模式:为其他对象提供一种代理以控制对这个对象的访问。
在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式 属于 结构型模式。
组成
- 抽象角色:通过接口或抽象类声明真实角色实现的业务方法;
- 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用;
- 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。(访问权限)
优点
- 职责清晰:真实的角色就是实现实际的业务逻辑,不用关心其他非本职的事务,通过后期的代理来完成事务,附带的结果就是编程简洁清晰;
- 代理对象可以在客户端和目标对象之间起到中介的作用,保护了目标对象;
- 高扩展性。
代码实现
情景
了解了代理模式的定义和优点以后,我们来模拟这样一个场景:
我们在网上观看电影的时候,一般都会借助一些视频网站(腾讯视频
、优酷
、爱奇艺
等);
在这些网站观看电影的时候,都会遇到这样的情况:
一些电影可以观看,一些电影(评分高的
、刚上映的
等)就观看不了,提示要充值VIP才能观看;
更有甚者,充了VIP也看不了,还需要买券观看。
满满的都是套路,唉 😦。
抛开其他不谈,这个观看视频的权限是如何实现的呢?其实就和我们今天要讲的代理模式息息相关。
代码
我们来模拟上述观看视频的情景:
// 抽象类
class VideoSite
{
public:
virtual void freemovie() = 0;
virtual void vipmovie() = 0;
virtual void ticketmovie() = 0;
}