代理模式(代购火车票)

       在实际的软件开发中,我们经常面临着对一个对象进行访问控制的问题,由于跨越网络或安全方面等原因不能直接或不需要直接被访问,直接访问的代价会给系统带来不必要的复杂性。

       如何在客户端程序与目标对象之间增加一层中间层,通过它来代替目标对象来完成客户程序对目标程序对象的各种操作要求,如此客户程序就可以透明的与目标对象进行交互?这是就需要用到代理模式。

      引入的对新对象来实现对真实对象的操作或者是将新的对象作为真实对象的一个替身,这种实现机制即为代理模式。

 

      通过票务中心买火车票,我们知道票务中心并不卖票,只有火车站才真正卖票,票务中心只是代理,票务中心卖的票其实是到火车站买的。

    在这个例子中,你就是客户,票务中心就是代理角色,火车站就是具体主体角色,卖票称为抽象主题角色。

抽象主题角色:

      1 public interface BuyTicket { 2 public void showTicket(); 3 }

 具体主题角色:

1 public class Train implements BuyTicket {
2 
3     @Override
4     public void showTicket() {
5     System.out.println("一张火车票");
6     }
7 
8 }

代理角色:

 1 public class TicketCenter implements BuyTicket {
 2    private BuyTicket ticket; //代理中心需要访问购票中心进行购票    并无出票的功能     也可以是火车站定义Train
 3     public TicketCenter(BuyTicket ticket) {
 4     this.ticket = ticket;//实例化,需要为自己所设的购票变量绑定实际的购票系统
 5 }
 6     @Override
 7     public void showTicket() {
 8       ticket.showTicket();//可以向用户显示的购到的票
 9     }
10     /*
11      * 在购票中心的购票功能上封装出属于代理系统的购票函数
12      */
13    public void buy(){
14     System.out.println("通过代理购得:");//表明构到票是通过代购系统
15     showTicket();//
16  }
17     
18 }

 

客户测试类:

1 public class ProxyPattern {
2 
3     public static void main(String[] args) {
4      BuyTicket x = new Train();//实例化一个购票系统
5      TicketCenter y = new TicketCenter(x); //y代理中心绑定着x购票系统
6      y.buy();//通过代理系统的购票函数购票
7     }
8 
9 }

 

转载于:https://www.cnblogs.com/the-wang/p/7280918.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值