携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
代理:平时我们去看明星的演唱会,是不是都得去买票,比如说区大麦网,黄牛,他们就是代理,通过向代理买票,我们就可以看到喜欢的明星,接下来我们通过代码来实现一下
1.(IService)创建基本的唱歌服务类,每个明星要开演唱会都得实现这个方法
package com.proxy.service;
public interface IService {
public void sing();
}
2.(LiuService.java)今天刘德华说要来开演唱会了,我们该怎么处理呢?实现IService类,并且得实现sing方法
package com.proxy.service;
public class LiuService implements IService {
@Override
public void sing() {
System.out.println("刘德华唱歌");
}
}
其他明星呢,比如陈奕迅也要来(ChenService.java)
package com.proxy.service;
public class ChenService implements IService{
@Override
public void sing() {
System.out.println("陈奕迅唱歌");
}
}
3.(Agent.java)代理商听说要开演唱会了,这时候准备开始卖票了,代理也必须实现IService,并且实现对应的sing方法,实例化对应的明星,调用唱歌的方法
package com.proxy.service;
public class Agent implements IService {
@Override
public void sing() {
System.out.println("开始卖票");
ChenService service = new ChenService();
service.sing();
System.out.println("演唱会结束");
}
}
4.(Demo.java)客户开始买票了,通过实例化代理对象,然后调用代理的sing方法
package com.proxy.service;
public class Demo {
public static void main(String[] args) {
IService iService = new Agent();
iService.sing();
}
}
5.我们看看具体文本代码结构

1.先创建基本的IService接口和定义对应的空方法
2.实现的IService并且实现具体的方法,如果LiuService Implements IService
3.定义代理类 Implements和实现具体的sing类,其中实现具体的sing类,代理类要传入具体的类并且调用具体方法:如
System.out.println("开始卖票")
LiuService service = new LiuService()
ChenService service = new ChenService()
service.sing()
System.out.println("演唱会结束")
4.调用
创建代理类并且使用Iservice获取对应的对象,然后调用sing方法
6.接下来我们改进一下每次代理都要new对象
package com.proxy.service;
import javax.xml.ws.Service;
public class Agent implements IService {
private IService target;
public Agent(IService target){
this.target = target;
}
@Override
public void sing() {
System.out.println("开始卖票");
target.sing();
System.out.println("演唱会结束");
}
}
7.开演唱会
package com.proxy.service;
public class Demo {
public static void main(String[] args) {
IService iService = new Agent(new ChenService());
iService.sing();
IService iService2 = new Agent(new LiuService());
iService2.sing();
}
}