1. Java之代理模式(Proxy Pattern)
(1)概述:
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。
在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
2. 应用场景:
(1)简介:
• 抽象对象角色:声明真实对象和代理对象的共同接口。
• 代理对象角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能够代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
• 真实对象角色:代理角色所代表的真实对象,是我们最终要引用的对象。
2. 应用场景代码:
(1)定义一个抽象对象角色,定义公共接口buy_car,如下:
/**
*
*抽象对象角色(公共接口)
*/
public interface buy_car {
public void buy_mycar();
}
(2)定义一个真实对象角色,这个真实对象角色实现了上面的公共接口,如下:
新建一个people人类,具有买车的行为,所以实现接口buy_car
/**
*真实对象角色,它实现公共接口
*/
class people implements buy_car { private int cash;
private String vip;
private String username; @Override
public void buy_mycar() {
// TODO Auto-generated method stub
System.out.print(username+"是vip 客户,可以直接购买新车!");
} public int getCash(){
return cash;
}
public void setCash(int cash){
this.cash = cash;
}
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
public String getVip(){
return vip;
}
public void setVip(String vip){
this.vip = vip;
}
}
(3)定义一个代理对象角色,如下:
people类不能拥有车,必须经过proxy代理类的认证,符合条件之后才可以拥有车辆,新建一个代理,这个代理类来考察当前的people是否有资格进行买车:
/**
*代理对象角色
*/
class proxyclass implements buy_car { private people people;
public people getPeople(){
return people;
}
public void setPeople(people people){
this.people = people;
} @Override
public void buy_mycar() {
// TODO Auto-generated method stub if (people.getVip() == "vip"){
people.buy_mycar();
return ;
}
if(people.getCash()>=50000){
System.out.println(people.getUsername()+"买了新车,交易结束!");
}
else
{
System.out.println(people.getUsername()+"钱不够,不能买车,继续比赛!");
}
}
}
(4)最后一个客户端测试类,如下:
最后创建一个客户端,用来模拟买车的行为:
public class run_main { public static void main(String[] args) {
// TODO Auto-generated method stub
people people_1 =new people();
people_1.setCash(60000);
people_1.setUsername("jeck"); people people_2 =new people();
people_2.setCash(40000);
people_2.setUsername("rose"); people people_3 =new people(); people_3.setCash(0);
people_3.setUsername("tom");
people_3.setVip("vip"); proxyclass proxy_buy = new proxyclass();
proxy_buy.setPeople(people_1);
proxy_buy.buy_mycar(); proxy_buy.setPeople(people_2);
proxy_buy.buy_mycar(); proxy_buy.setPeople(people_3);
proxy_buy.buy_mycar(); } }
程序运行结果如下:
jeck买了新车,交易结束!
rose钱不够,不能买车,继续比赛!
tom是vip 客户,可以直接购买新车!
代理模式主要使用了java的多态,干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚得很,同样一个接口。