设计模式 代理模式(静态代理)
程序员文章站
2022-03-05 17:03:06
...
代理模式的作用:为其他对象提供代理以控制对这个对象的访问.
举例: 租房子找中介的问题,中介就充当着代理的角色,代理房东把房子租出去,同时收取一定的中介费,相当于封装了房东把房子租出去的处理,同时还加上了中介自己的处理.
代理模式涉及到的角色:
-抽象角色:声明真实对象和代理对象共同的接口
-代理对象:代理对象内部含有对真实对象的引用,可以操作真实对象,代理对象提供和真实对象相同的接口,以便在任何时候都能
代替真实对象,同时代理对象在操作真实对象时,可以附加其他操作,相当于对真实对象进行了封装.
-真实对象:代理对象所代表的真实对象,是我们要真正操作的对象
以下以租房为实例,代码如下:
租房的抽象类:
代理对象和真实对象必须都继承该抽象类,如果抽象角色是接口的话,则代理对象和真实对象
必须都实现该接口。
以下是真实对象的代码,真实对象必须和代理对象一样,继承或者实现抽象角色
中介作为房东的代理,在代理模式中充当的代理对象的角色,中介的代码如下:
根据前面的说明,代理对象持有对真实对象的引用,可以操作真实对象,所以上面的代码中
有一个对房东对象的引用。
客服端调用代理对象时的代码如下:
举例: 租房子找中介的问题,中介就充当着代理的角色,代理房东把房子租出去,同时收取一定的中介费,相当于封装了房东把房子租出去的处理,同时还加上了中介自己的处理.
代理模式涉及到的角色:
-抽象角色:声明真实对象和代理对象共同的接口
-代理对象:代理对象内部含有对真实对象的引用,可以操作真实对象,代理对象提供和真实对象相同的接口,以便在任何时候都能
代替真实对象,同时代理对象在操作真实对象时,可以附加其他操作,相当于对真实对象进行了封装.
-真实对象:代理对象所代表的真实对象,是我们要真正操作的对象
以下以租房为实例,代码如下:
租房的抽象类:
public abstract class Rent { public abstract void rent(); }
代理对象和真实对象必须都继承该抽象类,如果抽象角色是接口的话,则代理对象和真实对象
必须都实现该接口。
以下是真实对象的代码,真实对象必须和代理对象一样,继承或者实现抽象角色
public class HouseHolder extends Rent { @Override public void rent() { System.out.println("从房东这里租房子"); } }
中介作为房东的代理,在代理模式中充当的代理对象的角色,中介的代码如下:
public class ProxyRent extends Rent { private HouseHolder obj; @Override public void rent() { if (obj == null) { obj = new HouseHolder(); } System.out.println("中介收取中介费"); obj.rent(); } }
根据前面的说明,代理对象持有对真实对象的引用,可以操作真实对象,所以上面的代码中
有一个对房东对象的引用。
客服端调用代理对象时的代码如下:
public class Client { public static void main(String[] args) { Rent rent = new ProxyRent(); rent.rent(); } }