设计模式之Proxy(代理模式)
笔者阅读了网上众多的有关代理模式的文章,在这里做个总结,以便查阅。 一、代理模式的定义 对其他对象提供一种代理以控制对这个对象的访问。代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 二、代理模式的类结构图 对类结构图的说明: 1:抽象主题角色(Abstract):声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方都能用代理主题代替。 三、应用场景 四、示例代码 //原始类方法接口 public interface Subject { public void readFile(String fileName); public void writeFile(String fileName); } //原始类:实现原始接口中的方法 public class RealSubject implements Subject { @Override public void readFile(String fileName) { System.out.println("对文件"+fileName+"进行读取。"); } @Override public void writeFile(String fileName) { System.out.println("对文件" + fileName+ "进行修改。"); } } //通原始类一样都实现Subject接口 public class Proxy implements Subject { private Subject subject; private boolean isReadable; private boolean isWriteable; //创建代理对象时,传入权限参数 public Proxy(Subject subject,boolean isReadable,boolean isWriteable){ this.subject = subject; this.isReadable = isReadable; this.isWriteable = isWriteable; } @Override public void readFile(String fileName) { if(isReadable){ subject.readFile(fileName); }else{ System.out.println("您没有读文件的权限。"); } } @Override public void writeFile(String fileName) { if(isWriteable) { subject.writeFile(fileName); }else{ System.out.println("您没有写文件的权限。"); } } } //测试Proxy public class TestProxy { public static void main(String[] args) { Subject proxy = new Proxy(new RealSubject(),true,false); proxy.readFile("myFile"); proxy.writeFile("myFile"); } } 测试的结果如下: 对文件myFile进行读取。 您没有写文件的权限。 【参考】http://www.cnblogs.com/edisonfeng/archive/2011/12/30/2307726.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |