public class Stars implements IStars{
private String name;
public Stars(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sing(){
System.out.println(getName() + " 唱了一首歌.");
}
public void dance(){
System.out.println(getName() + " 跳了一支舞.");
}
}
这是相应的接口:
public interface IStars {
void sing();
void dance();
}
现在创建一个代理类:
public class StarsProxy implements IStars{
//保存接收的代理对象
private IStars stars;
public StarsProxy(IStars stars){
this.stars = stars;
}
@Override
public void sing() {
System.out.println("我是代理,我收到了唱歌请求。");
stars.sing();
System.out.println("唱歌完毕");
}
@Override
public void dance() {
System.out.println("我是代理,我收到了跳舞请求。");
stars.dance();
System.out.println("跳舞完毕");
}
}
来测试一下:
public class Test {
public static void main(String[] args){
//创建目标对象
IStars stars = new Stars("Frank");//代理对象,把目标传给代理对象,建立关系
IStars starsProxy = new StarsProxy(stars);
starsProxy.sing();
starsProxy.dance();
}
}
运行结果:
我是代理,我收到了唱歌请求。
Frank 唱了一首歌.
唱歌完毕
我是代理,我收到了跳舞请求。
Frank 跳了一支舞.
跳舞完毕
public class StarsProxy implements IStars{
//保存接收的代理对象
private IStars stars;
//保存sing和dance的次数
private int num;
public StarsProxy(IStars stars){
this.stars = stars;
}
@Override
public void sing() {
if (!ifWork()) {
return;
}
System.out.println("我是代理,我收到了唱歌请求。");
stars.sing();
System.out.println("唱歌完毕");
}
@Override
public void dance() {
if (!ifWork()) {
return;
}
System.out.println("我是代理,我收到了跳舞请求。");
stars.dance();
System.out.println("跳舞完毕");
}
/**
* 是否继续工作
* @return 是返回true,否则返回false
*/
private boolean ifWork(){
if (num > 3){
System.out.println("明星今天已经很累了,明天再来吧。");
return false;
}else {
num++;
return true;
}
}
}
修改一下测试类:
public class Test {
public static void main(String[] args){
//创建目标对象
Stars stars = new Stars();
stars.setName("Frank");
//代理对象,把目标传给代理对象,建立关系
StarsProxy starsProxy = new StarsProxy(stars);
for (int i = 0;i < 5; i++){
starsProxy.sing();
}
}
}
测试结果如下:
我是代理,我收到了唱歌请求。
Frank 唱了一首歌.
唱歌完毕
我是代理,我收到了唱歌请求。
Frank 唱了一首歌.
唱歌完毕
我是代理,我收到了唱歌请求。
Frank 唱了一首歌.
唱歌完毕
我是代理,我收到了唱歌请求。
Frank 唱了一首歌.
唱歌完毕
明星今天已经很累了,明天再来吧。
public class Stars implements IStars{
private String name;
public Stars(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sing(){
System.out.println(getName() + " 唱了一首歌.");
}
public void dance(){
System.out.println(getName() + " 跳了一支舞.");
}
}
这是相应的接口:
public interface IStars {
void sing();
void dance();
}
现在创建一个代理类:
public class StarsProxy implements IStars{
//保存接收的代理对象
private IStars stars;
public StarsProxy(IStars stars){
this.stars = stars;
}
@Override
public void sing() {
System.out.println("我是代理,我收到了唱歌请求。");
stars.sing();
System.out.println("唱歌完毕");
}
@Override
public void dance() {
System.out.println("我是代理,我收到了跳舞请求。");
stars.dance();
System.out.println("跳舞完毕");
}
}
来测试一下:
public class Test {
public static void main(String[] args){
//创建目标对象
IStars stars = new Stars("Frank");//代理对象,把目标传给代理对象,建立关系
IStars starsProxy = new StarsProxy(stars);
starsProxy.sing();
starsProxy.dance();
}
}
运行结果:
我是代理,我收到了唱歌请求。
Frank 唱了一首歌.
唱歌完毕
我是代理,我收到了跳舞请求。
Frank 跳了一支舞.
跳舞完毕
public class StarsProxy implements IStars{
//保存接收的代理对象
private IStars stars;
//保存sing和dance的次数
private int num;
public StarsProxy(IStars stars){
this.stars = stars;
}
@Override
public void sing() {
if (!ifWork()) {
return;
}
System.out.println("我是代理,我收到了唱歌请求。");
stars.sing();
System.out.println("唱歌完毕");
}
@Override
public void dance() {
if (!ifWork()) {
return;
}
System.out.println("我是代理,我收到了跳舞请求。");
stars.dance();
System.out.println("跳舞完毕");
}
/**
* 是否继续工作
* @return 是返回true,否则返回false
*/
private boolean ifWork(){
if (num > 3){
System.out.println("明星今天已经很累了,明天再来吧。");
return false;
}else {
num++;
return true;
}
}
}
修改一下测试类:
public class Test {
public static void main(String[] args){
//创建目标对象
Stars stars = new Stars();
stars.setName("Frank");
//代理对象,把目标传给代理对象,建立关系
StarsProxy starsProxy = new StarsProxy(stars);
for (int i = 0;i < 5; i++){
starsProxy.sing();
}
}
}
测试结果如下:
我是代理,我收到了唱歌请求。
Frank 唱了一首歌.
唱歌完毕
我是代理,我收到了唱歌请求。
Frank 唱了一首歌.
唱歌完毕
我是代理,我收到了唱歌请求。
Frank 唱了一首歌.
唱歌完毕
我是代理,我收到了唱歌请求。
Frank 唱了一首歌.
唱歌完毕
明星今天已经很累了,明天再来吧。