动态代理模式,是二十三种设计模式之一,巧了我之前使用C#学习过静态代理模式,动态代理模式,我还真就没学过。
刚好,这次连静态代理模式也复习一下。
一:静态代理模式
1:比如说,我现在需要卖演唱会门票,那么我需要先定义一个卖票的接口
public interface Ticket
{
/**
* 卖票接口
*/
void sell();
}
2:卖票接口有了,我现在需要卖演唱会的门票,所以,我需要定义一个买演唱会门票的类实现卖票接口。
public class MusicTicket implements Ticket
{
/**
* 卖演唱会门票
*/
@Override
public void sell()
{
System.out.println("卖演唱会门票");
}
}
3:但是呢,现在有一个小问题,我买票,但是呢,我没有票,我得委托印刷公司在我卖票之前给我把票做出来。我还要委托检票团队,在演唱会开启之前,检票。以上操作,被成为代理。
public class MusicConductor implements Ticket
{
/**
* 卖演唱会门票对象
*/
private MusicTicket ticket; public MusicConductor(MusicTicket ticket)
{
this.ticket = ticket;
} /**
* 卖票
*/
@Override
public void sell()
{
before();
this.ticket.sell();
after();
} /**
* 委托印刷公司印票
*/
private void before()
{
System.out.println("静态代理 - 方法前增强");
} /**
* 委托检票团队检票
*/
private void after()
{
System.out.println("静态代理 - 方法后增强");
}
}
4:测试一下
public static void main(String[] args)
{
MusicConductor conductor = new MusicConductor(new MusicTicket());
conductor.sell();
}
运行代码,控制台输出:
静态代理 - 方法前增强
卖演唱会门票
静态代理 - 方法后增强
优点:可以做到在符合开闭原则的情况下对目标对象进行功能扩展。
缺点