代理模式代码实现

来源:互联网 发布:厦门淘宝客服工资 编辑:程序博客网 时间:2024/05/22 07:03

1:被代理

1
2
3
4
5
6
7
8
9
10
11
12
package com.fz.proxy.staticProxy;
 
/**
 * 抽象角色:提供代理角色和真实角色对外提供的公共方法
 */
public interface Star {
    void confer();//面谈
    void signContract();//签合同
    void bookTicket();//订票
    void sing();//唱歌
    void collectMoney();//收尾款
}

真实角色实现类:这里的真实角色中其实只做了一个唱歌的操作,这是真实角色真正的业务逻辑部分

2:真实

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.fz.proxy.staticProxy;
 
/**
 * 真实角色(明星艺人):
 */
public class RealStar implements Star{
    @Override
    public void confer() {
        System.out.println("RealStar.confer()");
    }
    @Override
    public void signContract() {
        System.out.println("RealStar.signContract()");
    }
    @Override
    public void bookTicket() {
        System.out.println("RealStar.bookTicket()");
    }
    @Override
    public void sing() {
        System.out.println("张学友.sing()");//真实角色的操作:真正的业务逻辑
    }
    @Override
    public void collectMoney() {
        System.out.println("RealStar.collectMoney()");
    }
}
3:代理
package com.fz.proxy.staticProxy;
  
/**
 * 代理角色(明星经纪人):
 */
public class ProxyStar implements Star{
    private Star star;//真实对象的引用(明星)
    @Override
    public void confer() {
        System.out.println("ProxyStar.confer()");
    }
    @Override
    public void signContract() {
        System.out.println("ProxyStar.signContract()");
    }
    @Override
    public void bookTicket() {
        System.out.println("ProxyStar.bookTicket()");
    }
    @Override
    public void sing() {
        star.sing();//真实对象的操作(明星唱歌)
    }
    @Override
    public void collectMoney() {
        System.out.println("ProxyStar.collectMoney()");
    }
    public ProxyStar(Star star) {//通过构造器给真实角色赋值
        this.star = star;
    }
}

public static void main(String[] args) {
    Star real = new RealStar();
    Star proxy = new ProxyStar(real);
    proxy.confer();
    proxy.signContract();
    proxy.bookTicket();
    proxy.sing();//真实对象的操作(明星唱歌)
    proxy.collectMoney();
}

原创粉丝点击