java代理模式--重温
程序员文章站
2022-05-07 19:43:48
...
UML类图:
老样子,话不多说,直接上代码
/**
* 代理类和真实类 抽象接口
* @author waf
*
*/
public interface Sell {
public Integer sell();
}
/**
* 代理类
* @author waf
*
*/
public class Buessnise implements Sell {
private Framer framer;
Integer addPrcie=2432;
public Buessnise(Framer framer){
this.framer=framer;
}
@Override
public Integer sell() {
// TODO Auto-generated method stub
System.out.println("商家加价"+addPrcie+"元");
return framer.sell()+addPrcie;
}
}
/**
* 真实类
* @author waf
*
*/
public class Framer implements Sell{
Integer price=3242;
@Override
public Integer sell() {
// TODO Auto-generated method stub
System.out.println("农名原价"+price+"元");
return price;
}
}
/*** 客户测试类
* @author waf
*
*/
public class Test {
public static void main(String[] args) {
Sell sell=new Buessnise(new Framer());
System.out.println("客户买进花了"+sell.sell()+"元");
}
}
运行结果:
该设计模式使用场景有以下几点:
第一:远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
第二:虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
第三:安全代理,用来控制真实对象访问时的权限。
第四:智能引用,是指当调用真实对象时,代理处理另外一些事。本文的例子就是采用了这一点。
通过对代理类和真实类共有方法的抽离为公共接口,两者都有其具体实现,唯一不同的是代理类依赖于真实类,初始化时将真实类的应用传入代理类,代理类对其共有方法进行修饰,达到客户对象通过代理对象访问真实对象!