代理模式是指,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在用户类和目标对象之间起到中介的作用。
代理对象是为了在不修改目标对象的基础上,增强主业务逻辑。
使用代理模式的作用:
功能增强:在原有的功能上,增加了额外的功能。新增的功能叫做功能增强
控制访问:在代理中,控制是否可以调用目标对象的方法
代理模式可以分为两组:静态代理和动态代理
静态代理
静态代理:代理类是手工实现的java文件,同时代理的目标对象是规定的
优点:容易理解,使用方便
缺点:在目标类比较多的时候,会产生大量的代理类;当接口改变是,会影响目标类
实现步骤:
定义业务接口
// 表示功能的,厂家,商家都要完成的功能
public interface UsbSell {
//定义方法 参数 amount:表示一次购买的数量,暂时不用
//返回值表示一个u盘的价格。
float sell(int amount);
//可以多个其它的方法
//void print();
}
定义接口实现类
//目标类: 金士顿厂家, 不接受用户的单独购买。
public class UsbKingFactory implements UsbSell {
@Override
public float sell(int amount) {
System.out.println("目标类中的方法调用 , UsbKingFactory 中的sell ");
//一个128G的u盘是 85元。
//后期根据amount ,可以实现不同的价格,例如10000个,单击是80, 50000个75
return 85.0f;
}
}
代理商
//taobao是一个商家,代理金士顿u盘的销售。
public class TaoBao implements UsbSell {
//声明 商家代理的厂家具体是谁
private UsbKingFactory factory = new UsbKingFactory();
@Override
//实现销售u盘功能
public float