Fork me on GitHub

代理模式——java设计模式

代理模式(Proxy Pattern)

GoF中给出的代理模式的定义为:
代理模式给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。
代理模式的英文叫做Proxy或Surrogate,它是一种对象结构型模式。
代理模式根据其目的和实现可分为很多种类,常用的代理模式包括如下几种:
(1)远程代理(Remote Proxy)————为一个位于不同的地址空间的对象提供一个本地的代理对象,这个不同的地址空间可以是在同一台主机中,也可以是在另一台主机中,远程代理又称为大使(Ambassador)
(2)虚拟代理(Virtual Proxy)————如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。
(3)保护代理(Protect Proxy)————控制一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
(4)缓冲代理(Cache Proxy)————为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
(5)只能引用代理(Smart Reference Proxy)————当一个对象被引用时,提供一些额外的操作,例如将对象被调用的次数记录下来。

代码实现:
1.抽象主题类——BuyTicket.java

public interface BuyTicket {
    public void showticket();
}

2.具体主题类——Train.java

public class Train implements BuyTicket {
    @Override
    public void showticket() {
        System.out.println("one ticket");
    }
}

3.代理角色类——TicketCenter.java

public class TicketCenter implements BuyTicket {
    private BuyTicket ticket;

    public TicketCenter(BuyTicket ticket) {
        this.ticket = ticket;
    }

    @Override
    public void showticket() {
        ticket.showticket();
    }

    public void buy() {
        System.out.println("by proxy");
        showticket();
    }
}

4.客户端测试类

public class ProxyPattern {
    public static void main(String args[]) {
        BuyTicket x = new Train();
        TicketCenter y = new TicketCenter(x);
        y.buy();
    }
}

运行结果:

by proxy
one ticket
posted @ 2017-05-07 10:42  ZepheryWen  阅读(178)  评论(0编辑  收藏  举报