`
wuzbin
  • 浏览: 15923 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中的代理(静态代理)

    博客分类:
  • java
 
阅读更多

        代理这个词通俗的讲就是中间人的意思。比如说你租房找的中介公司,中介与你就是代理与被代理的关系。在租房的过程中,原本一切事情都应该由你自己来做,比如找房源,联系房东,讨价还价,最终签约租房等等。但是,如果你找了中介,那么诸如找房源,联系房东这样的事情,中介就帮你做了,这就是代理。你只要最后跟房东商量一下价钱,然后签约就可以了,当然中介会收一些中介费。

        从租房这件事情我们可以总结以下几点(下面代码有类比的注释):

        1. 你是租房的主角,你要做的事情是租到一个房子。

        2. 中介看上去像是一个要租房的人一样(到处找房子、联系房东)

        3. 代理在你租房的前后都做了一些事情。(之前找房源,联系房东。之后收房租)

        4. 中介最后还是需要你来与房东签约(租房)

 

        下面看一下租房这件事情用java是怎么做的?

        这里约定:

        1. 租房:指的是与房东商量价钱以及签订租约

        2. 找房源、联系房东:租房过程中的一些琐碎的事情

 

Java代理模拟租房过程 

    租用者接口:     

 

public interface Renter {
    public void rent();
    public String getName();  //为了打印信息生动加的一个方法
}

 

    租房者:

 

public class HouseRenter implements Renter {
    private String name;
    public HouseRenter(String name) {
        this.name = name;
    }
    @Override
    public void rent() {
        System.out.println(name + "与房东商量价钱");
        //假设价钱总是能商量好
        System.out.println(name + "与房东签约");
    }

    @Override
    public String getName() {
        return name;
    }
}

 

   房产中介(代理) :

public class HouseAgent implements Renter{
    private Renter customer;
    private String name;
    public HouseAgent(Renter renter) {
        name = "小李";  //中介都叫小李
        this.customer = renter;
    }

    @Override
    public void rent() {//中介就好像跟要租房的人一样
        System.out.println(name + "找到一个房源");//中介做的事情
        System.out.println(name + "联系到了房东");//中介做的事情
        customer.rent();//最终还是由房客真正做租的动作
        System.out.println(name + "收到" + customer.getName() + "的中介费");//中介做的事情
    }

    @Override
    public String getName() {
        return name;
    }
}

    模拟租房的过程:

public static void main(String[] args) {
    Renter lilei = new HouseRenter("李蕾");  //租房屌丝李蕾
    HouseAgent xiaoli = new HouseAgent(lilei); //房屋中介妹子小李
    xiaoli.rent(); //中介妹子代理屌丝租房
}

   输出:

小李找到一个房源
小李联系到了房东
李蕾与房东商量价钱
李蕾与房东签约
小李收到李蕾的中介费

 

上面就是一个Java静态代理的例子。代理HouseAgent是静态存在的,使用的时候直接new一个用就是了。静态代理的缺点是它所代理的事情是固定的,是由他所实现的接口决定了的。动态代理则可以打破这个限制。

        

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics