代理模式

代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。

  代理分类:

    1:远程代理,就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。

    2:虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。这样可以达到性能优化的目的,比如你打开一个很大的HTML网页,里面有很多文字和图片,但是你可以很快的打开它,此时你看到的是所有的文字,单图片却是一张一张的加载出来的,这就算通过虚拟代理来代替了真实图片,虚拟代理存储了真实照片的路径和尺寸。

   3:安全代理,用来控制真实对象访问时的权限,一般用于对象应该有不同的访问权限的时候。

   4:智能指引,是指当调用真实的对象时,代理处理另外一些事。

实例UML图:

代码如下:

/**
 * @author Shuyu.Wang
 * @package:com.shuyu.proxy
 * @description:代理接口
 * @date 2018-11-12 22:18
 **/

public interface IGiveGift {
    void giveDolis();
    void giveFlowers();
    void giveChocolate();
}
/**
 * @author Shuyu.Wang
 * @package:com.shuyu.proxy
 * @description:
 * @date 2018-11-12 22:21
 **/
@Data
public class SchoolGirl {
    private String name;
}
/**
 * @author Shuyu.Wang
 * @package:com.shuyu.proxy
 * @description:代理类锁代理的真实实体
 * @date 2018-11-12 22:20
 **/
@Slf4j
public class Pursuit implements IGiveGift {
    SchoolGirl schoolGirl;

    public Pursuit(SchoolGirl schoolGirl) {
        this.schoolGirl = schoolGirl;
    }

    @Override
    public void giveDolis() {
        log.info(schoolGirl.getName() + "送你洋娃娃");
    }

    @Override
    public void giveFlowers() {
        log.info(schoolGirl.getName() + "送你鲜花");
    }

    @Override
    public void giveChocolate() {
        log.info(schoolGirl.getName() + "送你巧克力");
    }
}
/**
 * @author Shuyu.Wang
 * @package:com.shuyu.proxy
 * @description:代理类
 * @date 2018-11-12 22:25
 **/
@Slf4j
public class Proxy implements IGiveGift {
    Pursuit pursuit;

    public Proxy(SchoolGirl schoolGirl) {
        pursuit = new Pursuit(schoolGirl);
    }

    @Override
    public void giveDolis() {
        pursuit.giveDolis();
    }

    @Override
    public void giveFlowers() {
        pursuit.giveFlowers();
    }

    @Override
    public void giveChocolate() {
        pursuit.giveChocolate();
    }
}

测试类:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ProxyApplicationTests {

	@Test
	public void contextLoads() {
		SchoolGirl schoolGirl=new SchoolGirl();
		schoolGirl.setName("测试代理");

		Proxy proxy=new Proxy(schoolGirl);
		proxy.giveDolis();
		proxy.giveFlowers();
		proxy.giveChocolate();
	}

}

执行结果如下:

2018-11-12 22:34:28.072  INFO 20868 --- [           main] com.shuyu.proxy.Pursuit                  : 测试代理送你洋娃娃
2018-11-12 22:34:28.072  INFO 20868 --- [           main] com.shuyu.proxy.Pursuit                  : 测试代理送你鲜花
2018-11-12 22:34:28.072  INFO 20868 --- [           main] com.shuyu.proxy.Pursuit                  : 测试代理送你巧克力

代码git地址:https://github.com/iot-wangshuyu/designpatterns/tree/master/proxy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值