静态代理

package javaDesignModule.staticproxy;

//抽象较色:申明真是对象与代理对象的共同接口
public interface TicketManager {
/**
* 售票
*/
public void soldTicket();

/**
* 改签
*/
public void changeTicket();

/**
* 退票
*/
public void returnTicket();
}

package javaDesignModule.staticproxy;

//真实主题角色
public class TicketManagerImpl implements TicketManager {

@Override
public void soldTicket() {
// TODO Auto-generated method stub
System.out.println("售票");
}

@Override
public void changeTicket() {
// TODO Auto-generated method stub
System.out.println("改签");
}

@Override
public void returnTicket() {
// TODO Auto-generated method stub
System.out.println("退票");
}

/**
* 身份验证
*/
public void checkIdentity(){
System.out.println("身份验证");
}
}

package javaDesignModule.staticproxy;

public class StaticProxyTicketManager implements TicketManager {

TicketManager ticketManager;

public StaticProxyTicketManager(TicketManager ticketManager) {
this.ticketManager = ticketManager;
}

@Override
public void soldTicket() {
// TODO Auto-generated method stub
checkIdentity();
ticketManager.soldTicket();
}

@Override
public void changeTicket() {
// TODO Auto-generated method stub
checkIdentity();
ticketManager.changeTicket();
}

@Override
public void returnTicket() {
// TODO Auto-generated method stub
checkIdentity();
ticketManager.returnTicket();
}

public void checkIdentity(){
System.out.println("身份验证");
}

}

package javaDesignModule.staticproxy;

public class LogProxy implements TicketManager{

private TicketManager ticketManager;

LogProxy(TicketManager tm){
this.ticketManager = tm;
}

@Override
public void soldTicket() {
// TODO Auto-generated method stub
ticketManager.soldTicket();
log();
}

@Override
public void changeTicket() {
// TODO Auto-generated method stub
ticketManager.changeTicket();
log();
}

@Override
public void returnTicket() {
// TODO Auto-generated method stub
ticketManager.returnTicket();
log();
}

private void log(){
System.out.println("日志");
}
}

package javaDesignModule.staticproxy;

public class Test {

public static void main(String[] args) {
// TODO Auto-generated method stub
TicketManager tm = new LogProxy(new StaticProxyTicketManager(new TicketManagerImpl()));
tm.soldTicket();
System.out.println("---------");
tm.changeTicket();

System.out.println("---------");

tm.returnTicket();
}

}
静态代理类:在程序运行前,代理类class文件就已经被编译了
优点:
1.对真实对象进行封装,不会修改目标类的代码
缺点:
1.多个不同类型目标对象需要代理时,就需要建立多个代理类,造成类数量增长
2.代理的冗余
3.编译期加入,不够灵活

猜你喜欢

转载自hehefan.iteye.com/blog/2298385