设计模式之代理模式

定义:

一些情况下,客户不想或不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容或服务,或者添加客户需要的额外服务。

组成:

抽象主题角色:声明了抽象主题和代理主题的公共接口

代理主题角色:内部包含对真是主题的引用,并提供和真实主题角色相同的接口

真实主题角色:定义真实的对象

以论坛中已注册用户和游客的权限不同来作为第一个例子:已注册的用户拥有发帖,修

改自己的注册信息,修改自己的帖子等功能;而游客只能看到别人发的帖子,没有其他权限。 为了简化代码,更好的显示出代理模式的骨架,我们这里只实现发帖权限的控制。

首先我们先实现一个抽象主题角色 MyForum,里面定义了真实主题和代理主题的共同 接口——发帖功能。

代码如下:

public interface MyForum {

public void AddFile(); }

这样,真实主题角色和代理主题角色都要实现这个接口。其中真实的主题角色基本就是 将这个接口的方法内容填充进来。所以在这里就不再赘述它的实现。我们把主要的精力放到 关键的代理主题角色上。代理主题角色代码大体如下:

public class MyForumProxy implements MyForum {

private RealMyForum forum = new RealMyForum() ; private int permission ; //权限值
public MyForumProxy(int permission)
{

this.permission = permission ; }

//实现的接口
public void AddFile() {

//满足权限设置的时候才能够执行操作 

//Constants 是一个常量类 if(Constants.ASSOCIATOR == permission) {

forum.AddFile(); }

else
System.out.println("You are not a associator of MyForum ,please

registe!"); }

 

posted @ 2016-02-24 15:43  wangbaixue  阅读(285)  评论(0编辑  收藏  举报