Java设计模式之代理模式
2017-08-13 00:46
337 查看
模式介绍
代理模式为其他对象提供一种代理以控制对这个对象的访问。应用场景
生活中有很多代理模式的例子,例如你有房要出售,就会找中介帮忙把你的房子出售,这个过程中介就是代理。代码例子
下面使用一个中介帮人出售房屋的demo来模拟代理模式。uml 图
静态代理
房屋出售接口/** * 房屋出售 */ public interface SellHouse { /** * 发布出售内容 */ public void publish(); /** * 联系客户 */ public void contactCustomer(); /** * 带客户看房 */ public void seeHouse(); /** * 签约 */ public void sign(); /** * 卖房 */ public void sell(); }
房东类
/** * 房东 */ public class Fangdong implements SellHouse { @Override public void publish() { System.out.println("发布房屋出售消息"); } @Override public void contactCustomer() { System.out.println("联系客户"); } @Override public void seeHouse() { System.out.println("带客户看房"); } @Override public void sign() { System.out.println("签约"); } @Override public void sell() { System.out.println("卖房"); } }
中介类
/** * 房屋出售 */ public interface SellHouse { /** * 发布出售内容 */ public void publish(); /** * 联系客户 */ public void contactCustomer(); /** * 带客户看房 */ public void seeHouse(); /** * 签约 */ public void sign(); /** * 卖房 */ public void sell(); }
Main
/** * 代理模式-静态代理 */ public class Main { public static void main(String args[]){ //房东 Fangdong f = new Fangdong(); //中介 Zhongjie zhongjie = new Zhongjie(f); //房屋消息 zhongjie.publish(); //联系客户 zhongjie.contactCustomer(); //带客户看房 zhongjie.seeHouse(); //签约 zhongjie.sign(); //交房 zhongjie.sell(); } }
动态代理
通过反射机制动态生成代理者的对象,java给我们提供了一个便捷的动态代理接口InvocationHandler。DynamicProxy
定义一个DynamicProxy类实现InvocationHandler
/** * 动态代理类 */ public class DynamicProxy implements InvocationHandler{ private Object object; public DynamicProxy(Object object){ this.object = object; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result; //调用被代理类对象的方法 result = method.invoke(object,args); return result; } }
Main2
/** * 代理模式-动态代理 */ public class Main2 { public static void main(String args[]){ //房东 Fangdong fangdong = new Fangdong(); //动态代理 DynamicProxy proxy = new DynamicProxy(fangdong); //动态构建一个代理 SellHouse sellHouse = (SellHouse) Proxy.newProxyInstance(fangdong.getClass().getClassLoader(),fangdong.getClass().getInterfaces(),proxy); //发布 sellHouse.publish(); //联系客户 sellHouse.contactCustomer(); //带人看房 sellHouse.seeHouse(); //签约 sellHouse.sign(); //卖房 sellHouse.sell(); } }
打印
发布房屋出售消息 联系客户 带客户看房 签约 卖房
相关文章推荐
- 浅析JAVA设计模式之代理模式(一)
- Java-马士兵设计模式学习笔记-代理模式-聚合与继承方式比较
- Java设计模式之代理模式
- java设计模式之代理模式
- 代理模式---java设计模式
- java设计模式之代理模式
- Java设计模式—代理模式
- java设计优化之代理模式
- Java设计模式菜鸟系列(十四)代理模式建模与实现
- java设计模式-代理模式
- Java设计模式Proxy之动态代理
- java设计模式之五:代理模式
- java设计模式---代理模式
- java 简单的代理设计模式
- java设计模式8——代理模式(Proxy)
- Java设计模式-代理模式之静态代理
- 菜鸟版JAVA设计模式—适配器模式,装饰模式,代理模式异同
- Java设计模式--代理模式
- (二)Java设计模式--代理模式
- java设计模式--代理模式(三)