一、代理模式简介
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。
2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。
二、模式结构
代理模式包括以下三种角色:
(1)抽象主题(Subject):抽象主题是一个接口,该接口是对象和它的代理所共用的接口,即是RealSubject角色和Proxy角色实例所实现的接口。
(2)实际主题(RealSubject):实际主题是实现抽象主题接口的类。实际主题的实例是代理角色(Proxy)实例所要代理的对象。
(3)代理(Proxy):代理是实现抽象主题接口的类(代理和实际主题实现了相同的接口)。代理含有主题接口声明的变量,该变量用来存放RealSubject角色的实例引用,这样一来,代理的实例就可以控制对它所包含的RealSubject角色的实例访问,即可以控制对它所代理对象的访问。
三、代理模式实例
实例1
1.问题描述
实例2 发布帖子
在一个论坛中已注册用户和游客的权限不同,已注册的用户拥有 发帖、修改自己的注册信息、修改自己的帖子等功能;而游客只 能看到别人发的帖子,没有其他权限。使用代理模式来设计该权 限管理模块。在本实例中我们使用代理模式中的保护代理,该代理用于控制对 一个对象的访问,可以给不同的用户提供不同级别的使用权限。
运行结果: