代理模式 | Proxy Pattern

来源:互联网 发布:java安装时出现错误 编辑:程序博客网 时间:2024/06/04 19:59

代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

组成:
抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。

抽象角色:一个买车的接口

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 客户,可以直接购买新车! 
原创粉丝点击