代理模式 通过代理对象间接访问 代购 客户端不想或者不能直接访问一个对象,可以通过一个称为代理的第三者来实现间接访问,该方案称为代理模式 角色 抽象主题角色Subject 声明真实主题类与代理类的公共方法 可以是抽象类,也可以是接口或者具体类 代理主题角色Proxy 真实主题角色RealSubject
看例子,权限代理
1.抽象权限类
package Proxy;
/**
* Created by Jiqing on 2016/10/21.
*/
public interface AbstractPermission
{
public void modifyUserInfo();
public void viewNote();
public void publishNote();
public void modifyNote();
public void setLevel(int level);
}
2.具体权限类
package Proxy;
/**
* Created by Jiqing on 2016/10/21.
*/
public class RealPermission implements AbstractPermission
{
public void modifyUserInfo()
{
System.out.println("修改用户信息!");
}
public void viewNote()
{ }
public void publishNote()
{
System.out.println("发布新帖!");
}
public void modifyNote()
{
System.out.println("修改发帖内容!");
}
public void setLevel(int level)
{ }
}
3.代理权限类
package Proxy;
/**
* Created by Jiqing on 2016/10/21.
*/
public class PermissionProxy implements AbstractPermission
{
private RealPermission permission=new RealPermission();
private int level=0;
public void modifyUserInfo()
{
if(0==level)
{
System.out.println("对不起,你没有该权限!");
}
else if(1==level)
{
permission.modifyUserInfo();
}
}
public void viewNote()
{
System.out.println("查看帖子!");
}
public void publishNote()
{
if(0==level)
{
System.out.println("对不起,你没有该权限!");
}
else if(1==level)
{
permission.publishNote();
}
}
public void modifyNote()
{
if(0==level)
{
System.out.println("对不起,你没有该权限!");
}
else if(1==level)
{
permission.modifyNote();
}
}
public void setLevel(int level)
{
this.level=level;
}
}
4.执行
package Proxy;
/**
* Created by Jiqing on 2016/10/21.
*/
public class Client
{
public static void main(String args[])
{
AbstractPermission permission;
permission=new PermissionProxy();
permission.modifyUserInfo();
permission.viewNote();
permission.publishNote();
permission.modifyNote();
System.out.println("----------------------------");
permission.setLevel(1);
permission.modifyUserInfo();
permission.viewNote();
permission.publishNote();
permission.modifyNote();
}
}
结果:
对不起,你没有该权限!
查看帖子!
对不起,你没有该权限!
对不起,你没有该权限!
----------------------------
修改用户信息!
查看帖子!
发布新帖!
修改发帖内容!