Spring学习-静态代理

本文详细介绍了静态代理模式,以租房模型为例,阐述了抽象角色、真实角色、代理角色及客户的关系。强调了代理模式的可扩展性和功能分离,同时也讨论了其缺点——需要为每个真实角色创建代理,导致开发效率降低。
摘要由CSDN通过智能技术生成

1.含义

        静态代理就是一个真实角色有一个代理角色

2.组成

        抽象角色:代理角色和真实角色共同完成的事情,在租房模型中中介和房东都是租房,所以抽象角色就是租房;抽象角色一般用接口或抽象类完成

        真实角色:被代理的角色,在租房模型中房东由中介代理租房,所以房东就是真实角色

        代理角色:代理真实角色的角色,在租房模型中房东是真实角色,中介是代理房东的,所以中介就是代理角色;在代理真实角色后一般会做一些附属操作,也就是扩展功能

        客户:访问代理角色的人,在租房模型中客户找中介租房,此客户即彼客户

3.模型

        租房模型,一开始是客户和房东沟通,后来房东让中介代理租房,这时客户变成了找中介租房。

4.租房模型的代码实现

        首先是还没有代理角色也就是中介的情况,这时候仅需要找房东租房就行了

//租房模型的抽象角色——租房
public interface Rent {
    //租房的方法
    public void rent();
}

//真实角色——房东
public class Host implements Rent{
    public void rent(){
        System.out.println("房东要租房子");
    }
}

//客户,直接调用房东的租房方法找房东租房
public class Client {
    public static void main(String[] args) {
        Host host=new Host();
        host.rent();
    }
}

        此时由于自己找房东太困难,中介应运而生,代理租房

//代理角色——中介
public class ProxyRole implements Rent{
    private Host host;

    //代理角色的无参构造和有参构造
    ProxyRole(){

    }
    ProxyRole(Host host){
        this.host=host;
    }

    //实现租房功能,根据不同房东的租房要求来租房
    public void rent(){
        host.rent();
    }
}

         客户找中介租房,选好房子后执行对应房东的租房要求

public class Client {
    public static void main(String[] args) {
        //获取指定的房东
        Host host=new Host();
        //中介根据指定的房东要求来租房给客户
        ProxyRole pr=new ProxyRole(host);
        pr.rent();
    }
}

        那既然直接找房东租房简单,为什么要有个代理呢?这是因为代理是可扩展的,能够扩展出除了主要功能外的其他功能。在这个租房的例子中,中介可以扩展出中介费、带领客户看房子的扩展功能,这些功能是房东不具有的

    //扩展功能:看房子
    public void seehouse(){
        System.out.println("看房子");
    }
    //扩展功能:收中介费
    public void paymore(){
        System.out.println("收中介费");
    }

        然后客户就可以使用代理的扩展功能了

public class Client {
    public static void main(String[] args) {
        Host host=new Host();
        ProxyRole pr=new ProxyRole(host);
        //租房子
        pr.rent();
        //扩展功能,看房子和中介费
        pr.seehouse();
        pr.paymore();
    }
}

        运行结果 :

5.总结

        从以上的例子中不难看出,代理模式的优点首先就是可扩展性高,并且能够使得真实角色功能纯粹,不需要关系其他服务;其次就是真实角色只负责主要功能,扩展功能交由代理角色实现,分工明确;最后就是所有扩展的功能都由代理角色实现,使得扩展功能方便集中管理。这也是静态代理的优点。

        当然静态代理也有缺点,静态代理是一个真实角色对应一个代理角色,如果有多个真实角色就需要多个代理角色,会使得开发效率变低。比如租房需要租房中介,二手车需要二手车中介等,这就需要编写许多的中介代理,开发难度就变高了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值