设计模式—–代理模式
个人博客,想要搭建个人博客的可以进来看看: http://www.ioqian.top/
代理模式(静态),为另一个对象提供一个替身或占位符以控制对这个对象的访问
设计模式系列源码 https://github.com/liloqian/DesiginModeDemo
背景,我们生活中,一般找个明星代言的过程是,找到明星的代言人,和代言人商量就可以了
1.UML类图
- Subject ,抽象出来的一个借口
- RealSubject , 真正做事的对象,背景中的明星
- Proxy , 客户访问的对象,持有RealSUbject的引用,明星的代言人
2.代码
Subject 抽象类
/**RealSubject和proxy的公共接口*/
public interface Star {
void sing();
void getMoney();
}
RealSubject 动作执行者
/**实际劳动者*/
public class RealStar implements Star {
@Override
public void sing() {
System.out.println("RealStar: I am sing ...");
}
@Override
public void getMoney() {
System.out.println("RealStar: I get money");
}
}
proxy 代理者
/**代理类*/
public class ProxyStar implements Star{
//持有真实对象的引用
Star realStar;
public ProxyStar(Star realStar) {
this.realStar = realStar;
}
@Override
public void sing() {
System.out.println("proxyStar: 我去通知歌手唱歌");
realStar.sing();
}
@Override
public void getMoney() {
System.out.println("proxyStar: 我去帮歌手收钱,然后给他");
realStar.getMoney();
}
}
测试Main
public class Main {
public static void main(String[] args) {
//客户和代理类交流,代理类持有真实对象
Star star = new ProxyStar(new RealStar());
star.sing();
star.getMoney();
}
}
3.装饰者模式和代理模式的区别
代理模式和装饰模式看起来很像,在代理模式中代理和真实对象实现了同一个接口;在装饰模式中,具体对象和装饰者都继承了同一个抽象基累。但是两者是完全不同的。
- 代理模式是控制对象的访问;
- 装饰模式是为对象增加行为;