常用工厂设计模式之代理模式---用几个demo就能理解的代理模式
首先我们要知道,工厂设计模式分为三类:创建型模式、行为型模式、结构型模式
代理模式属于结构型
一、什么是代理
代理模式(Proxy Pattern):一个类代表另一个类的功能
很难懂?
其实用现实生活的话说,简单理解代理就是中介,而代理又分为静态代理和动态代理
但是不管哪种代理都遵循一个前提:
代理要求代理类和被代理类(即目标类)要有共同的行为
那问题又来了,什么又是代理类与目标类的共同行为?
我来告诉你:
- 代理类与目标类实现同一个接口
- 代理类继承目标类
诶,你会发现了,实现接口和继承,不就是多态的体现吗?
没错,说白了就是通过代理类实现目标类里面的方法
下面用几个简单的demo来演示一下
二、静态代理
静态代理:代理类在程序运行之前由程序员在开发过程已经写好了
1、代理类和目标类实现同一个接口
建一个接口
public interface Subject {
public void chuzu();
}
建一个目标类
public class Fangdong implements Subject {
@Override
public void chuzu() {
System.out.println("房屋出租,2000一个月");
}
}
建一个代理类
public class Zhongjie implements Subject{
//目标类的引用
Fangdong fangdong = new Fangdong();
@Override
public void chuzu() {
System.out.println("发布广告");
System.out.println("带客户看房");
//调用目标类方法
fangdong.chuzu();
System.out.println("另收中介费500");
}
}
测试
public class demo1 {
@Test
public void test(){
Subject subject = new Zhongjie();
subject.chuzu();
}
}
运行结果
2、代理类继承目标类
修改一下代理类
public class Zhongjie extends Fangdong{
@Override
public void chuzu() {
System.out.println("发布广告");
System.out.println("带客户看房");
//直接调用父类(目标类)方法
super.chuzu();
System.out.println("另收中介费500");
}
}
修改一下目标类
public class Fangdong {
public void chuzu() {
System.out.println("房屋出租,2000一个月");
}
}