Java设计模式之代理模式

Posted 鹏鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java设计模式之代理模式相关的知识,希望对你有一定的参考价值。

代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式:
  人如其名,代理相信大家都可以经常看到什么什么代理,现实中代理太多了。感受最真实的是火车票的代理,经常可以在街上看到,你买票的是在代理商买的,但是付的钱依然会交给铁大哥,这就是代理。现实中的你可能会接触的例子就是叫同学去给你买票,实际上不是你去买,但是是票是你的。这也是代理。
代理模式组成:
  抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
  代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
  真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
代理的优点:
  (1).职责清晰 真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。叫你去买票,我管你有没有摔跤撒的,不需要关注这种问题。
  (2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。别人在路上一看,以为是你同学要买票去哪里,实际上买的是你的,保护了你。
  (3).高扩展性 只要符合火车站规定的人,同学都可以去代人买票。
下面就用代码来实现着一个过程。
 1 package com.roc.prory;
 2 
 3 /**
 4  * 定义一个种类的人 抽象角色
 5  * 
 6  * @author liaowp
 7  * 
 8  */
 9 public interface Person {
10 
11     /**
12      * 可以去火车站买票
13      */
14     public void buyTicket();
15 
16 }
package com.roc.prory;
/**
 * 小王 代理角色
 * @author liaowp
 *
 */
public class XiaoWang implements Person {
    
    private Person  person = null;//默认就是一个人
    
    public XiaoWang(){//小王比较聪明,知道带别人买票赚钱。默认是只赚小明的钱
        this.person = new XiaoMing();
    }
    
    public XiaoWang(Person per){//赚小明的不够,只要是人就赚。
        this.person = per;
    }
    
    /**
     * 小王也是人,也可以去买票。
     */
    public void buyTicket() {//调不然方法去买票,代理商
        this.person.buyTicket();
    }

}
package com.roc.prory;

/**
 * 小明 真实角色
 * @author liaowp
 *
 */
public class XiaoMing implements Person {

    //比较懒
    
    /* 
     * 小明也是人,也可以去买票。
     * @see com.roc.prory.Person#buyTicket()
     */
    @Override
    public void buyTicket() {
        System.out.println("买小明的票");
    }

}
package com.roc.prory;
/**
 * 小丽
 * @author liaowp
 *
 */
public class XiaoLi implements Person {

    /**
     * 小丽也可以自己买票。
     */
    public void buyTicket() {
        System.out.println("买小丽的票");
    }

}
package com.roc.prory;
/**
 * 测试代理模式
 * @author liaowp
 *
 */
public class Client {
    public static void main(String[] args) {
        XiaoWang xiaoWang = new XiaoWang();//new 的小王
        xiaoWang.buyTicket();//小王去买了小明的票,这就是代理
        
        XiaoLi xiaoLi = new XiaoLi();//买票也要有这个人呀。先把小丽 new 出来。
        XiaoWang mrWang = new XiaoWang(xiaoLi);//小丽说:小王帮我去买个票呗
        mrWang.buyTicket();//屁颠屁颠的跑去买了
    }
}

 

以上是关于Java设计模式之代理模式的主要内容,如果未能解决你的问题,请参考以下文章

Java 设计模式之代理模式,Java 静态代理,Java 动态代理

Java设计模式之代理模式

JAVA设计模式之代理模式

大型Java进阶专题设计模式之代理模式

设计模式——代理模式

#yyds干货盘点# 设计模式之代理模式:动态代理