代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
组成:
抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
抽象角色:一个买车的接口
public interface buy_car {
public void buy_mycar();
}
真实角色: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;
}
}
代理角色: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()+"钱不够,不能买车,继续比赛!");
}
}
}
最后创建一个客户端,来模拟买车的行为:
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 客户,可以直接购买新车!
本文介绍了代理模式的概念及其在软件设计中的应用。通过一个买车的例子详细解释了抽象角色、真实角色及代理角色之间的关系,并展示了如何使用代理模式来控制对对象的访问。
1354

被折叠的 条评论
为什么被折叠?



