代理模式

一、前言

  对一些对象提供代理,以限制那些对象去访问其他对象。

二、结构图


 

 
三、应用场景

  比如在玩“极品飞车”这款游戏,如果游戏者手中的金钱达到了一定的数量就可以到车店买一部性能更高的赛车,那么这个卖车的“车店”就是一个典型的“汽车厂家”的“代理”,他为汽车厂家“提供卖车的服务”给有需求的人士。从面向对象的方面考虑,“销售汽车的代理”也是一个对象,那么这个对象也具有一定的状态,在软件项目中这个对象也具有管理财务进销存的基本功能,那么在设计时就要以面向OOP编程的思想来考虑软件的类结构,这个销售汽车的代理也是一个类了。

 

代理模式-JAVA代码实现

新建一个买车的接口:

 

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 客户,可以直接购买新车!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值