常用工厂设计模式之代理模式---用几个demo就能理解的代理模式

常用工厂设计模式之代理模式---用几个demo就能理解的代理模式

  • 一、什么是代理
  • 二、静态代理
    • 1、代理类和目标类实现同一个接口
      • 建一个接口
      • 建一个目标类
      • 建一个代理类
      • 测试
      • 运行结果
    • 2、代理类继承目标类
      • 修改一下代理类
      • 修改一下目标类
      • 测试
      • 运行结果
  • 三、动态代理
    • 1、目标类实现接口---jdk代理
      • 接口
      • 目标类实现接口
      • JdkProxy代理类(这里相对比较难理解)
      • 测试
      • 运行结果
    • 2、目标类没有实现接口---cglib代理
      • 目标类
      • cglib代理类
      • 测试
      • 运行结果
  • 四、由程序自己动态生成的代理类

首先我们要知道,工厂设计模式分为三类:创建型模式、行为型模式、结构型模式
代理模式属于结构型


一、什么是代理

代理模式(Proxy Pattern):一个类代表另一个类的功能

很难懂?

其实用现实生活的话说,简单理解代理就是中介,而代理又分为静态代理动态代理

但是不管哪种代理都遵循一个前提:

代理要求代理类和被代理类(即目标类)要有共同的行为

那问题又来了,什么又是代理类与目标类的共同行为

我来告诉你:

  • 代理类与目标类实现同一个接口
  • 代理类继承目标类

诶,你会发现了,实现接口和继承,不就是多态的体现吗?

没错,说白了就是通过代理类实现目标类里面的方法

下面用几个简单的demo来演示一下


二、静态代理

静态代理:代理类在程序运行之前由程序员在开发过程已经写好了

1、代理类和目标类实现同一个接口

建一个接口

public interface Subject {public void chuzu();
}

建一个目标类

public class Fangdong implements Subject {@Overridepublic void chuzu() {System.out.println("房屋出租,2000一个月");}
}

建一个代理类

public class Zhongjie implements Subject{//目标类的引用Fangdong fangdong = new Fangdong();@Overridepublic void chuzu() {System.out.println("发布广告");System.out.println("带客户看房");//调用目标类方法fangdong.chuzu();System.out.println("另收中介费500");}
}

测试

public class demo1 {@Testpublic void test(){Subject subject = new Zhongjie();subject.chuzu();}
}

运行结果

在这里插入图片描述

2、代理类继承目标类

修改一下代理类

public class Zhongjie extends Fangdong{@Overridepublic void chuzu() {System.out.println("发布广告");System.out.println("带客户看房");//直接调用父类(目标类)方法super.chuzu();System.out.println("另收中介费500");}
}

修改一下目标类

public class Fangdong  {public void chuzu() {System.out.println("房屋出租,2000一个月");}
}

测试

public class demo1 {@Testpublic void 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部