您的位置:首页 > 编程语言

代理模式--介绍、应用及代码

2014-02-11 18:16 190 查看
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用。
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。

代理模式四角色:抽象角色、真实角色、黄牛、你

实例:买不到火车票,找黄牛去火车站给你买票。

上面这个例子,你就是“执行角色”,黄牛就是“代理角色”,火车站是“真实角色”,买票称为“抽象角色”!

买票是种行为,谁买票不知道,所以是抽象角色;

只有在火车站才能买票,而且不管谁买票都得在火车站买,它真实存在的;

本来是你自己去买票的,但是你找了黄牛,所以黄牛是你的代理对象;而且你只需要买票,但是黄牛除了买票还有很多行为,黄牛将你需要买票的行为进行了封装;

真正要买票的是你自己,所以这个动作得你发起。

如果这个例子还看不懂,建议加强JAVA基本功学习,尤其是类、接口、对象之间的关系。

代码如下:

//抽象角色--买票
public interface Subject {
public abstract void maipiao();
}
//代理角色--黄牛
public class RealSubject implements Subject {

@Override
public void maipiao() {
// TODO Auto-generated method stub
System.out.print(this.getClass().getName()+":");
System.out.println("买票");
}

}
//真实角色--火车站
public class ProxySubject implements Subject {

private Subject subject;

RealSubject(Subject subject){
this.subject = subject;
}

@Override
public void maipiao(){
inStation();
this.subject.maipiao();
outStation();
}

private void inStation(){
// Other codes
System.out.print(this.getClass().getName()+":");
System.out.println("黄牛收你钱进火车站买票");
}

private void outStation(){
// Other codes
System.out.print(this.getClass().getName()+":");
System.out.println("黄牛买到票出火车站把票给你");
}

}
//执行角色--你
public class Hello {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Subject sub=new RealSubject(new ProxySubject());
sub.maipiao();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息