代理模式
通过代理对象间接访问
代购
客户端不想或者不能直接访问一个对象,可以通过一个称为代理的第三者来实现间接访问,该方案称为代理模式
角色
抽象主题角色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();
}
}

结果:

对不起,你没有该权限!

查看帖子!

对不起,你没有该权限!

对不起,你没有该权限!

修改用户信息!

查看帖子!

发布新帖!

修改发帖内容!

JAVA设计模式之【代理模式】的更多相关文章

  1. Java设计模式之代理模式(静态代理和JDK、CGLib动态代理)以及应用场景

    我做了个例子 ,需要可以下载源码:代理模式 1.前言: Spring 的AOP 面向切面编程,是通过动态代理实现的, 由两部分组成:(a) 如果有接口的话 通过 JDK 接口级别的代理 (b) 如果没 ...

  2. java设计模式6——代理模式

    java设计模式6--代理模式 1.代理模式介绍: 1.1.为什么要学习代理模式?因为这就是Spring Aop的底层!(SpringAop 和 SpringMvc) 1.2.代理模式的分类: 静态代 ...

  3. 夜话JAVA设计模式之代理模式(Proxy)

    代理模式定义:为另一个对象提供一个替身或者占位符以控制对这个对象的访问.---<Head First 设计模式> 代理模式换句话说就是给某一个对象创建一个代理对象,由这个代理对象控制对原对 ...

  4. Java设计模式:代理模式(转)

    代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一 ...

  5. Java 设计模式_代理模式(2016-08-19)

    概念: 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 就是一个人或者机构代表另一个人或者机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一 ...

  6. JAVA设计模式:代理模式&& 装饰模式区别

    在前面学习了代理模式和装饰模式后,发现对两者之间有时候会混淆,因此对两者进行了区别和理解: 装饰模式你可以这样理解,就像糖一样,卖的时候商家大多要在外面包一层糖纸,其实原本还是糖. public in ...

  7. Java设计模式:代理模式(二)

    承接上文 三.计数代理 计数代理的应用场景是:当客户程序需要在调用服务提供者对象的方法之前或之后执行日志或者计数等额外功能时,就可以用到技术代理模式.计数代理模式并不是把额外操作的代码直接添加到原服务 ...

  8. java设计模式之代理模式 ,以及和java 回调机制的区别

    java 代理模式就是: 将自己要做的事交给别人去做(这个别人就是代理者,自己就是被代理者),为什么自己能做的要交给别人去做了?假如一个小学生小明,现在要写作业,但是又想玩游戏,他更想玩游戏,并且不想 ...

  9. Java设计模式之代理模式(Proxy)

    前言: 最近在研究Retrofit开源框架的时候,其主要核心代码是通过注解标示参数,动态代理模式实现具体接口,反射机制进行参数解析,最终实现发送请求.其实之前在学习Xutils源码的时候,Xutils ...

  10. Java设计模式 之 代理模式

    所谓的代理模式就是为其它类或对象提供一个代理以控制对这个对象的访问.那么常见的代理有远程代理,虚拟代理,保护代理,智能代理. 1. 远程代理:为一个不同地址空间的对象提供一个本地代理对象. 2. 虚拟 ...

随机推荐

  1. 防火墙设置对外开放port

    今天在部署项目时,遇到项目组其它人重整了server上的iis.结果外部訪问不了所部属的项目,通过一些渠道找到了设置方法 例如以下报错的截图: 原因是"入站ICMP规则"被重整了, ...

  2. hdoj--3367--Pseudoforest(伪森林&&最大生成树)

    Pseudoforest Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  3. HTML5学习笔记(三):标识文本的语义元素

    1.<time>元素:标注日期和时间 日期格式:YYYY-MM-DD,如2016-04-13: 时间格式(24小时制):HH-MM,如15:31: 最后,组合以上规则就可以制定具体的日期和 ...

  4. dell台式机设置U盘启动步骤

    在开机启动看见DELL的标志后,连续按F12键进入BIOS界面,然后按照界面进行操作,操做完成后保存退出,然后再按F12键选择U盘启动. 注意硬盘模式需要选择为disabled.

  5. infludb语法--官网

    https://docs.influxdata.com/influxdb/v0.8/api/query_language/ InfluxDB features a SQL like query lan ...

  6. ubuntu16.04 安装 docker-compose

    下载安装 docker-composecurl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose ...

  7. Chrome添加Unity本地文档引擎

    前提:输入Unity后出来的第一连接 浏览器的设置: 分别填入: UnityDocs unity3d.com/cn file:///Applications/Unity/Documentation/e ...

  8. CDR中怎么绘制一个漂亮的球衣?

    cdr中怎么绘制一个漂亮的球衣?想要绘制一个漂亮的球衣,该怎么绘制呢?下面我们就来看看cdr绘制漂亮的球衣的教程,需要的朋友可以参考下: 1.画一个长方形,增加节点,移动节点,变形成如图 2.直线变曲 ...

  9. criteria的projection做分页

  10. MySQL 关闭 binlog 日志

    [关闭binlog日志] 1.vim /etc/my.cnf 注释如下内容: #log-bin=mysql-bin #binlog_format=mixed #server-id = 1 #expir ...