代理模式
来源:互联网 发布:淘宝窗帘店 编辑:程序博客网 时间:2024/05/21 08:34
百度百科
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
组成:
- 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
- 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
- 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
抽象角色
public interface GiveGift { void giveDolls(); void giveFlowers(); void giveChocolate();}
真实角色
public class Pursuit implements GiveGift{ SchoolGird mm; public Pursuit(SchoolGird mm) { this.mm = mm; } public void giveDolls(){ System.out.println("送洋娃娃"); } public void giveFlowers(){ System.out.println("送洋花"); } public void giveChocolate(){ System.out.println("送洋巧克力"); }}
代理角色
public class Proxy implements GiveGift{ Pursuit pursuit; //持有一个被代理角色对象的引用 public Proxy(SchoolGird schoolGird) { this.pursuit = new Pursuit(schoolGird); } //代理角色中,可以添加新方法 public void lookMovies() { System.out.println("看电影"); } public void giveDolls(){ System.out.println("送洋娃娃"); } public void giveFlowers(){ System.out.println("送洋花"); } public void giveChocolate(){ System.out.println("送洋巧克力"); }}
客户端代码
public class Main { public static void main(String[] args) { SchoolGird schoolGird = new SchoolGird(); schoolGird.setName("文静"); Proxy proxy = new Proxy(schoolGird); proxy.giveChocolate(); proxy.giveDolls(); proxy.giveFlowers(); proxy.lookMovies(); }}
jdk代理、实现InvocationHandler接口
public class DynamicProxyTest { interface Ihello { void sayHello(); } static class Hello implements Ihello { @Override public void sayHello() { System.out.println("hello world!"); } } static class DynamicProxy implements InvocationHandler { Object originalObj; //要被代理类的一个引用 Object bind(Object originalObj) { this.originalObj = originalObj; return Proxy.newProxyInstance(originalObj.getClass().getClassLoader(), originalObj.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("welcome"); //在调用实际类之前做的的事 return method.invoke(originalObj, args); } } public static void main(String[] args) { Ihello ihello = (Ihello) new DynamicProxy().bind(new Hello()); ihello.sayHello(); }}
阅读全文
0 0
- 代理模式--动态代理
- 代理模式-静态代理
- 代理模式-静态代理
- 代理模式 & 动态代理
- 代理模式--静态代理
- 代理模式--动态代理
- 代理模式(动态代理)
- 代理模式-动态代理
- 代理模式-动态代理
- 代理模式动态代理
- 代理模式-静态代理
- 代理模式-动态代理
- 代理模式 -动态代理
- 代理模式---动态代理
- 代理模式-动态代理
- 代理模式--静态代理
- 代理模式!
- 代理模式
- 新浪博客另类截流玩法
- 1019. 数字黑洞 (20)
- PyTorch的concat也就是torch.cat实例
- LeetCode-674. Longest Continuous Increasing Subsequence
- 价值投资,变幻莫测
- 代理模式
- tensorflo读取数据之dataset
- eclipse+maven+selenium 如何启动谷歌浏览器
- 超级书架
- java、Data类
- C++函数的数组形参
- idea error:java: 无效的源发行版: 8
- mysql--16131order by
- php取出mysql数据时乱码