为其他对象提供一种代理以控制对这个对象的访问。
例如:一个男孩找了个漂亮的女朋友, 他不想让女朋友和别的男孩子打电话, 于是他聘请了一个保镖,负责转接电话,如果是女孩给父亲或母亲打的,就转接过去,否则就拒绝。
package pattern;
interface Contact {
void call(String str);
}
class Permission {
public Boolean permit(String str){
if (str.equals("mother")||str.equals("father"))
return true;
else return false;
}
}
class Guard implements Contact {
Contact contact;
Permission perm;
public Guard(Contact contact, Permission perm){
this.contact = contact;
this.perm = perm;
}
public void call(String str){
if (perm.permit(str)){
contact.call(str);
}
else {
System.out.println("I am busy now.");
}
}
}
class ContactGirl implements Contact {
public void call(String str){
System.out.println("Hello "+str);
}
}
public class Proxy {
public static void main(String[] args){
Contact girl = new ContactGirl();
Permission perm = new Permission();
Contact a = new Guard(girl, perm);
a.call("a boy");
}
}
通过Guard这个代理类,男孩就成功达到了限制女朋友和别的男孩通电话的目的。