代理模式实例与解析--实例一:论坛权限控制代理
实例一:论坛权限控制代理 在一个论坛中已注册用户和游客的权限不同,已注册的用户拥有发帖、修改自己的注册信息、修改自己的帖子等功能;而游客只能看到别人发的帖子,没有其他权限。使用代理模式来设计该权限管理模块。 在本实例中我们使用代理模式中的保护代理,该代理用于控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。
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>
代理模式实例与解析--实例一:论坛权限控制代理相关推荐
- 桥接模式实例与解析 实例一:模拟毛笔
桥接模式实例与解析 实例一:模拟毛笔 现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类.而 ...
- 【JEECG技术博文】简单实例讲解JEECG ONLINE表单权限控制(jeecg3.6)
简单实例讲解JEECG ONLINE表单权限控制(jeecg3.6) 原 文:http://blog.itpub.net/30066956/viewspace-1872409/ 相关博文: ...
- 代理模式的原理解析入门
什么是代理模式? 它在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能. 我们通过一个简单的例子来解释一下这段话. 这个例子来自我们在第 25.26.39.40 节中讲的性能 ...
- 代理模式源码解析(jdk+spring+mybatis)
首先是java.lang.reflect,也就是我们刚刚使用的Proxy这个类,这里面coding的时候,也就是debug的时候,这个就是代理的一个典型应用,还有proxyFactoryBean,这个 ...
- 小菜成长记---【proxy 代理模式 ---西门庆干潘金莲——王婆做代理】
西门庆找潘金莲,潘金莲肯定不会答应,咋办找个王婆做代理呗. 西门庆干潘金莲的事我就不说了大家心里明的像镜似的.. 程序代码实现如下: 定义女人接口,以及方法. 潘金莲实现女人接口,以及方法. 王婆实现 ...
- 命令模式实例与解析--实例一:电视机遥控器
电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视机的不同操作.抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽象命令接口,这三个具体命令类分别代表三种操作 ...
- 组合模式实例与解析 实例一:水果盘
实例一:水果盘 在水果盘(Plate)中有一些水果,如苹果(Apple).香蕉(Banana).梨子(Pear),当然大水果盘中还可以有小水果盘,现需要对盘中的水果进行遍历(吃),当然如果对一个水果盘 ...
- 模板方法模式实例与解析--实例一:银行业务办理流程
在银行办理业务时,一般都包含几个基本步骤,首先需要取号排队,然后办理具体业务,最后需要对银行工作人员进行评分.无论具体业务是取款.存款还是转账,其基本流程都一样.现使用模板方法模式模拟银行业务办理流程 ...
- 享元模式实例与解析实例二:共享网络设备(有外部状态)
实例二:共享网络设备(有外部状态) 虽然网络设备可以共享,但是分配给每一个终端计算机的端口(Port)是不同的,因此多台计算机虽然可以共享同一个网络设备,但必须使用不同的端口.我们可以将端口从网络设备 ...
- 迭代器模式实例与解析---实例:电视机遥控器
电视机遥控器就是一个迭代器的实例,通过它可以实现对电视机频道集合的遍历操作,本实例我们将模拟电视机遥控器的实现. public class Client {public static void dis ...
最新文章
- f, (ax1, ax2) = plt.subplots(1, 2, figsize=(20,10)) //该句搭框架,确定输出1行x2列的图象,图片尺寸为20x10英寸
- 1371. Find the Longest Substring Containing Vowels in Even Counts
- 「小程序JAVA实战」小程序的留言和评价功能(70)
- 在linux环境下启动es,linux上Elasticsearch 安装配置、网页访问
- arduino的矩阵示例程序_用树莓派 Arduino 制造 LED 矩阵彩灯
- 11月14日filter与在web开发中集成spring培训日记
- 利用matlab聚类分析,利用Matlab软件实现聚类分析
- vs窗体应用程序c语言,使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)...
- 关于STM32使用RTC唤醒停止模式的设置
- C++常用的图像像素值读写的方法
- PHP繁體,php如何实现转繁体
- 科技解读:com域名价格为什么连年上涨?小微企业怎样应对?
- springboot总结(一)
- Java TemplateProcessingException之Cannot execute subtraction: operands are null and #1234
- mysql超市管理系统怎么写_java+mysql超市进销存管理系统设计+源代码
- Python中Print()函数的用法___实例详解(全,例多)
- iOS-APP性能测试
- 勇士大战恶魔?这款桌游明明是套高质量原创手办
- 物联网概念的蝶变:从M2M到智慧地球
- 基于机器学习中集成学习的stacking方式进行的金线莲质量鉴别研究(python进行数据处理并完成建模,对品种进行预测)