实例一:论坛权限控制代理 在一个论坛中已注册用户和游客的权限不同,已注册的用户拥有发帖、修改自己的注册信息、修改自己的帖子等功能;而游客只能看到别人发的帖子,没有其他权限。使用代理模式来设计该权限管理模块。 在本实例中我们使用代理模式中的保护代理,该代理用于控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。

public interface AbstractPermission
{public void modifyUserInfo();public void viewNote();public void publishNote();public void modifyNote();public void setLevel(int level);
}
public class Client
{public static void main(String args[]){AbstractPermission permission;permission=(AbstractPermission)XMLUtil.getBean();permission.modifyUserInfo();permission.viewNote();permission.publishNote();permission.modifyNote();System.out.println("----------------------------");permisspublic interface AbstractPermission
{public void modifyUserInfo();public void viewNote();public void publishNote();public void modifyNote();public void setLevel(int level);
}ion.setLevel(1);permission.modifyUserInfo();permission.viewNote();permission.publishNote();permission.modifyNote();}
}
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;}
}
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){   }
}
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.*;
public class XMLUtil
{
//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象public static Object getBean(){try{//创建文档对象DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc;                           doc = builder.parse(new File("config.xml")); //获取包含类名的文本节点NodeList nl = doc.getElementsByTagName("className");Node classNode=nl.item(0).getFirstChild();String cName=classNode.getNodeValue();//通过类名生成实例对象并将其返回Class c=Class.forName(cName);Object obj=c.newInstance();return obj;}   catch(Exception e){e.printStackTrace();return null;}}
}

配置文件config.xml<?xml version="1.0"?>
<config><className>PermissionProxy</className>
</config>

代理模式实例与解析--实例一:论坛权限控制代理相关推荐

  1. 桥接模式实例与解析 实例一:模拟毛笔

    桥接模式实例与解析   实例一:模拟毛笔           现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类.而 ...

  2. 【JEECG技术博文】简单实例讲解JEECG ONLINE表单权限控制(jeecg3.6)

    简单实例讲解JEECG ONLINE表单权限控制(jeecg3.6) 原       文:http://blog.itpub.net/30066956/viewspace-1872409/ 相关博文: ...

  3. 代理模式的原理解析入门

    什么是代理模式? 它在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能. 我们通过一个简单的例子来解释一下这段话. 这个例子来自我们在第 25.26.39.40 节中讲的性能 ...

  4. 代理模式源码解析(jdk+spring+mybatis)

    首先是java.lang.reflect,也就是我们刚刚使用的Proxy这个类,这里面coding的时候,也就是debug的时候,这个就是代理的一个典型应用,还有proxyFactoryBean,这个 ...

  5. 小菜成长记---【proxy 代理模式 ---西门庆干潘金莲——王婆做代理】

    西门庆找潘金莲,潘金莲肯定不会答应,咋办找个王婆做代理呗. 西门庆干潘金莲的事我就不说了大家心里明的像镜似的.. 程序代码实现如下: 定义女人接口,以及方法. 潘金莲实现女人接口,以及方法. 王婆实现 ...

  6. 命令模式实例与解析--实例一:电视机遥控器

    电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视机的不同操作.抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽象命令接口,这三个具体命令类分别代表三种操作 ...

  7. 组合模式实例与解析 实例一:水果盘

    实例一:水果盘 在水果盘(Plate)中有一些水果,如苹果(Apple).香蕉(Banana).梨子(Pear),当然大水果盘中还可以有小水果盘,现需要对盘中的水果进行遍历(吃),当然如果对一个水果盘 ...

  8. 模板方法模式实例与解析--实例一:银行业务办理流程

    在银行办理业务时,一般都包含几个基本步骤,首先需要取号排队,然后办理具体业务,最后需要对银行工作人员进行评分.无论具体业务是取款.存款还是转账,其基本流程都一样.现使用模板方法模式模拟银行业务办理流程 ...

  9. 享元模式实例与解析实例二:共享网络设备(有外部状态)

    实例二:共享网络设备(有外部状态) 虽然网络设备可以共享,但是分配给每一个终端计算机的端口(Port)是不同的,因此多台计算机虽然可以共享同一个网络设备,但必须使用不同的端口.我们可以将端口从网络设备 ...

  10. 迭代器模式实例与解析---实例:电视机遥控器

    电视机遥控器就是一个迭代器的实例,通过它可以实现对电视机频道集合的遍历操作,本实例我们将模拟电视机遥控器的实现. public class Client {public static void dis ...

最新文章

  1. f, (ax1, ax2) = plt.subplots(1, 2, figsize=(20,10)) //该句搭框架,确定输出1行x2列的图象,图片尺寸为20x10英寸
  2. 1371. Find the Longest Substring Containing Vowels in Even Counts
  3. 「小程序JAVA实战」小程序的留言和评价功能(70)
  4. 在linux环境下启动es,linux上Elasticsearch 安装配置、网页访问
  5. arduino的矩阵示例程序_用树莓派 Arduino 制造 LED 矩阵彩灯
  6. 11月14日filter与在web开发中集成spring培训日记
  7. 利用matlab聚类分析,利用Matlab软件实现聚类分析
  8. vs窗体应用程序c语言,使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)...
  9. 关于STM32使用RTC唤醒停止模式的设置
  10. C++常用的图像像素值读写的方法
  11. PHP繁體,php如何实现转繁体
  12. 科技解读:com域名价格为什么连年上涨?小微企业怎样应对?
  13. springboot总结(一)
  14. Java TemplateProcessingException之Cannot execute subtraction: operands are null and #1234
  15. mysql超市管理系统怎么写_java+mysql超市进销存管理系统设计+源代码
  16. Python中Print()函数的用法___实例详解(全,例多)
  17. iOS-APP性能测试
  18. 勇士大战恶魔?这款桌游明明是套高质量原创手办
  19. 物联网概念的蝶变:从M2M到智慧地球
  20. 基于机器学习中集成学习的stacking方式进行的金线莲质量鉴别研究(python进行数据处理并完成建模,对品种进行预测)

热门文章

  1. qpython3编辑器手机版下载_QPython3
  2. java实现用户分页消息功能
  3. 抖音最火的微信推送教程
  4. 怎么查看html页面,网页浏览记录如何查看_怎样查历史网页浏览记录
  5. 2022-2028年中国抽水蓄能电站设备制造行业市场竞争态势及发展趋向分析报告
  6. nginx 下配置禅道
  7. 5G版聚合路由器加速释放5G潜能
  8. 平面几何----用角平分线逆定理证明阿氏圆定理
  9. java8中的date和joda time中的日期相互转换
  10. c# 操作Word总结(四)——书签使用