代理模式(1):静态代理
一,静态代理介绍
- 了解设计模式中的代理模式的同学应该都知道如果想要为被代理类生成代理,需要让代理类和被代理类共同实现同一个接口,在代理类中增加额外逻辑来实现代理模式,这种方式在编译期间就已经确认了哪个类是代理类,被代理的又是哪个类,这都是需要开发人员在编译之前就编写好的,是为静态
1,代理模型的角色分析
- 抽象角色:一般会使用抽象类或者接口实现
- 真实角色:实体类,被代理的角色
- 代理角色:代理真实角色,而且可以附属一些其他操作
- 使用角色:使用代理角色进行操作
2,静态代理模式的优点
- 可以使真实角色更加纯粹,不用去关注一些公共的事情
- 公共的业务由代理来完成,实现业务的分工
- 公共业务的要扩展的话,可以更加集中和方便
3,静态代理模式的缺点
- 因为代理对象,需要实现与目标对象一样的接口,会导致代理类十分繁多,不易维护,同时一旦接口增加方法,则目标对象和代理类都需要维护
二,模拟静态代理的例题
- 用静态代理打个比方,比如说:一个房东要出租房屋,他会贴一个公告说有房出租,同时房屋中介也会帮房东发布公告,在说明房东意图的同时还会做一些其他的事,比如带客户看房,收取中介费等...。这里的房东就是真实角色,发布的公告就是抽象角色,中介就是代理角色,租房的人就是使用角色,真实角色和代理角色都会实现抽象角色中的方法,就像是房东和中介都会发布公告,但是中介在发布公告的同时还可以实现其他的操作
1,代码
抽象角色
1 //租房的接口:抽象
2 public interface Rent {
3 //出租公告
4 void rent();
5 }
真实角色
1 //房东
2 public class Host implements Rent {
3
4 //出租公告
5 public void rent(){
6 System.out.println("出租房子");
7 }
8
9 }
代理角色
1 //房屋中介
2 public class Proxy implements Rent {
3
4 //房东
5 private Host host;
6
7 public void setHost(Host host) {
8 this.host = host;
9 }
10
11 public void rent() {
12 lookHouse();
13 host.rent();
14 fare();
15 }
16
17 private void lookHouse(){
18 System.out.println("中介带你看房");
19 }
20
21 private void fare(){
22 System.out.println("收取中介费");
23 }
24
25 }
测试
1 public class You {
2 public static void main(String[] args) {
3
4 Host host = new Host();
5
6 Proxy proxy = new Proxy();
7 proxy.setHost(host);
8 proxy.rent();
9
10 }
11 }
2,运行结果