静态代理不是技术是一种思想,具体大意如下:

  委托方(需要代理的一方)有业务提供,而为了解耦委托方不直接向客户提供业务,而是将业务交给代理方去代理提供,这时客户可直接向代理方请求业务请求,再由代理方去请求委托方处理业务,以此达到处理业务的目的。

优点:

  委托方:只负责单纯的具体业务,不再关注公共业务,公共业务则交给代理方去处理,以此降低耦合性。

  代理方:只依赖于委托方,将具体业务交给委托方,自己则处理公共业务,所谓公共业务就是即使不同的具体业务也会有公共的业务,虽然他们的具体业务不同,但是公共业务确实相同的,所以代理方只负责处理公共业务,而具体业务则交给委托方去处理即可。

下面用java代码模拟一段租房的业务来描述静态代理:

1.委托方和代理方都要实现的一个接口(也可以是抽象类),该接口描述他们都可以做的事情:

package mr.li.inface;

public interface Host {

    /** 房屋出租  */
    void houseRental();
}

2.代理类:

package mr.li.proxy;

import mr.li.host.Landlord;
import mr.li.inface.Host;

/**
 * 代理类:中介公司
 * @author yanLong.Li
 * @date 2019年3月14日 下午3:35:11
 */
public class IntermediaryCompany implements Host{

    private Landlord landlord;
    
    @Override
    public void houseRental() {
        System.out.println("代理方(公共业务):带客户看房子");
        landlord.houseRental();
        System.out.println("代理方(公共业务):与客户签合同");
        System.out.println("代理方(公共业务):交易完成");
    }
    
    public IntermediaryCompany(Landlord landlord) {
        this.landlord = landlord;
    }
}

3.委托类:

package mr.li.host;

import mr.li.inface.Host;
/**
 * 委托类:房东
 * @author yanLong.Li
 * @date 2019年3月14日 下午5:05:14
 */
public class Landlord implements Host{

    @Override
    public void houseRental() {
        System.out.println("委托方(具体业务):出租一号大院");
    }

    
}

4.获得代理类的工厂类:

package mr.li.factory;

import mr.li.host.Landlord;
import mr.li.inface.Host;
import mr.li.proxy.IntermediaryCompany;

/**
 * 静态工厂类
 * @author yanLong.Li
 * @date 2019年3月14日 下午5:03:36
 */
public class IntermediaryFactory {

    public static Host getInstance() {
        return new IntermediaryCompany(new Landlord());
    }
}

5,客户端:

package mr.li.test;

import mr.li.factory.IntermediaryFactory;
import mr.li.inface.Host;
/**
 * 客户
 * @author yanLong.Li
 * @date 2019年3月14日 下午5:09:03
 */
public class Client {
    
    public static void main(String[] args) {
        System.out.println("客户(客户请求业务):我要租房子");
        Host host = IntermediaryFactory.getInstance();
        host.houseRental();
    }
}

打印结果:

客户(客户请求业务):我要租房子
代理方(公共业务):带客户看房子
委托方(具体业务):出租一号大院
代理方(公共业务):与客户签合同
代理方(公共业务):交易完成

版权声明:本文为li-yan-long原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/li-yan-long/p/10540794.html