暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

java设计模式---代理模式

大学生IT学习之家 2019-05-06
185

代理模式


需求:每个明星都有经纪人,客户通过与经纪人进行交流签合同等,而明星只负责表演。


       1.静态代理

代码实现:

//事务接口
public interface Yan {
void yuYue();
void qianHeTong();
void Yachu();
void geiQian();
}
//明星类
public class Star implements Yan{


@Override
public void yuYue() {
}


@Override
public void qianHeTong() {
}


@Override
public void Yachu() {
System.out.println("Star唱歌");
}


@Override
public void geiQian() {
}


}
//代理类
public class DaiLi implements Yan{
private Star star ;
public DaiLi(Star star) {
this.star=star;
}

@Override
public void yuYue() {
System.out.println("DaiLi预约");
}


@Override
public void qianHeTong() {
System.out.println("DaiLi签合同");
}


@Override
public void Yachu() {
star.Yachu();
}


@Override
public void geiQian() {
System.out.println("DaiLi给钱");
}


}
//测试类
public class Test {
public static void main(String[] args) {
Star star = new Star();
DaiLi da = new DaiLi(star);
da.yuYue();
da.qianHeTong();
da.Yachu();
da.geiQian();
}
}


 静态代理总结:


         优点:可以在不修改原对象的基础上进行拓展与拦截


        缺点:因为都实现了相同的接口,不易于维护。


     2.动态代理


代码实现:

//事务接口
public interface Yan {
void yuYue();
void qianHeTong();
void Yachu();
void geiQian();
}
//代理类
public class DaiLi implements Yan{
@Override
public void yuYue() {
System.out.println("DaiLi预约");
}


@Override
public void qianHeTong() {
System.out.println("DaiLi签合同");
}


@Override
public void Yachu() {

}


@Override
public void geiQian() {
System.out.println("DaiLi给钱");
}


}
//明星类
public class Star implements Yan{


@Override
public void yuYue() {

}


@Override
public void qianHeTong() {

}


@Override
public void Yachu() {
System.out.println("Star唱歌");
}


@Override
public void geiQian() {

}


}


//handler类
public class YanHandler implements InvocationHandler{
private Star star;
private DaiLi da;
public YanHandler(Star star, DaiLi da) {
super();
this.star = star;
this.da = da;
}


@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if(method.getName().equals("Yachu")) {
da.yuYue();
da.qianHeTong();
method.invoke(star, args);
da.geiQian();
}
return null;
}


}
//测试类
public class Client {
public static void main(String[] args) {
Star star = new Star();
DaiLi da = new DaiLi();
YanHandler handlier = new YanHandler(star,da);
Yan proxy=(Yan) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[] {Yan.class}, handlier);
proxy.Yachu();
}
}


动态代理总结:


    这样就可以把我们要重复做的逻辑抽出来,在handler里边统一控制。


3.AOP思想


   aop是基于动态代理实现的把各个事务通过给单独抽出来,然后通过配置去寻找他的前置,后置,异常等方法。


文章转载自大学生IT学习之家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论