java动态代理和静态代理的比较(含代码)

来源:互联网 发布:linux 连不上外网 编辑:程序博客网 时间:2024/06/08 16:37
package testdaili;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


/** 
 * @ClassName: dailitest 
 * @Description: 本篇文章是对代理的复习
 * @author: pgj
 * @date: 2017年10月12日 下午8:36:30  
 */
public class dailitest {



public static void main(String[] args) {
///静态代理
new teacher(new mother()).dosome();
///动态代理
working pro1=(working)new proxyman().getpreoxy(new father());
pro1.dosome();
working2 pro2=(working2)new proxyman().getpreoxy(new father());
pro2.play();
}
}
interface working{

void dosome();
///void speaker();静态代码缺点所在
}
///////////////////////静态代理////////////////////////
///这里是真是类
class mother implements working  {


@Override
public void dosome() {
// TODO Auto-generated method stub

System.out.println("这里是真实类:妈妈指导孩子写作业");
}
}






//这里是代理类:静态代理,对真实进行封装,
class  teacher implements working{
private mother mother;

public teacher(mother mother) {
// TODO Auto-generated constructor stub
this.mother=mother;
}
public void dosome() {
// TODO Auto-generated method stub
    System.out.println("这是代理类:放学后老师叫家长指导学生写作业!");
mother.dosome();
System.out.println("这是代理类:老师批改作业");
}
}
////////////////////动态代理////////////////////
/***
 *动态代理的优点:
 *1.静态代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。
 *如果接口增加一个方法,除了所有实现类需要实现这个方法外,
 *所有代理类也需要实现此方法。增加了代码维护的复杂度,相对而言动态代理只需要实现真是类方法,少了一半。
 *如果增加一个接口
 *2.在静态代理中相较于动态代理,当需要编写大量的代理的时候,编写代理类麻烦了,简而言之,就是动态代理proxyman就像工厂一样,静态代理就像个体户
 *
 *
 */
interface working2{

void play();
}


class father implements working, working2{

@Override
public void dosome() {
// TODO Auto-generated method stub
System.out.println("这是真实类:爸爸带孩子玩!");
}


@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("这是真实类:爸爸带孩子打球");
}
}
class proxyman implements InvocationHandler{
private Object object;///真是类


public Object getpreoxy(Object object){
this.object=object;
return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(), this);

   /////实现原理是反射
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
System.out.println("这是动态代理:工厂");
Object sss=method.invoke(object, args);

return sss;
}

}

最后:哎,点赞和评论的人好少啊!

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 捷达小水管睹了怎么办 楼房下水管冻了怎么办 一楼地面很潮湿怎么办 新房子地面有裂缝怎么办 地砖下面的下水管漏水怎么办 速冻饺子冻在一起了怎么办 牛排泡水解冻了怎么办 饺子都粘一起了怎么办 把桃子放冷冻了怎么办 抖音小视频连不上网怎么办 网络视频连不上网怎么办 苹果8视频不清晰怎么办 乳疮腐烂还臭怎么办 冰箱肉腐烂很臭怎么办 指环扣松了怎么办视频 奇迹mu端游杀人了怎么办 奇迹最强者号找不着了怎么办 v领地退不了押金怎么办 全民奇迹sf钻石变负数怎么办 电脑上的新建没有了怎么办 火车上行李箱砸人怎么办 违建拆除后怎么办房产证 外地车遇到限号怎么办 双号限行 违了怎么办 下高速当地限行怎么办 下高速发现限号怎么办 下高速正好限号怎么办 限号不让下高速怎么办 我的歌没有编曲怎么办 奇迹暖暖以前的账号怎么办 孕妇误吃桃胶了怎么办? 孕4个月吃了桃胶怎么办 刚怀孕吃了桃胶怎么办 额头被打了个包怎么办 裤子被84掉颜色怎么办 高中生晚上偷家里电脑上网怎么办 住高层睡不好觉怎么办 水瓶座如果恨我们了该怎么办 不锈钢保温瓶不保温了怎么办 壁纸颜色选深了怎么办 客厅壁纸太暗了怎么办