最近一段时间在看设计模式书籍,学习和了解了很多设计模式。昨天下午有公司打电话让我去面试,聊天中就被问到了有没有自己的博客。我想了下这些年看了些书籍但确实重来没有总结自己的学习成果,想着以后看完一些书籍要及时写下学习的知识点同时也可以和广大程序员分享。好了废话不多说了,今天来讲讲代理模式。 代理模式分为静态代理和动态代理模式两种展现形式。
静态代理模式比较简单,总结由代理类和代理对象组成,如下代码例子:
//代理对象实现该接口
package com.study.proxy;
public interface Imove {
public void move();
}
//传说中的坦克对象实现了移动接口,也就是这里说的代理对象
package com.study.proxy;
public class Tank implements Imove{
@Override
public void move() {
System.out.println("坦克在移动.....");
}
}
//为传说中的坦克对象做代理,其实感觉像经纪人
package com.study.proxy;
public class TankMoveProxy implements Imove {
private Imove moveab;
public TankMoveProxy(Imove tank) {
super();
this.moveab = tank;
}
@Override
public void move() {
System.out.println("开始时间");
moveab.move();
System.out.println("结束时间");
}
}
//客户端调用代理类做处理
Tank tank = new Tank();
Imove moveTank = new TankLogProxy(tank);
moveTank.move();
这样你就可以实现最简单的对坦克类的代理了,使用代理的好处是可以在不改变坦克移动的核心代码前提下,在其前后加上其它的业务处理。
上面的代理使用了聚合的方式来实现,还可以使用继承的方式来实现上述的代理功能。但是聚合比继承更灵活这里就不在描述继承的实现了。
该静态代理的
优点:该代理只需要关注自身的可以重用性的业务逻辑
缺点:只能固定的代理部分接口实现,如果实现大量的接口还不能胜任。
动态代理可以说是对静态代理的完美补充,下次博客就说说动态代理的实现。