代理模式定义:为其他对象提供一种代理,控制对这个对象的访问
代理模式角色:
Proxy:代理对象,实现目标接口并且持有目标接口的引用
Subject:目标接口
RealSubject:具体的目标对象
举个例子,苹果发布会,我想买一台iphone,行货比较贵,港货比较便宜,大陆买不到港货,我人在杭州,找一个代理商,我告诉他我要的手机型号,让代理商帮我买;
我们分析下角色:
代理商就是Proxy(代理对象)
Subject(目标接口):我的想法,具体操作,场景业务,一个人
RealSubject(具体的目标对象):我
下面我写下这个简单的例子
看下目标借口(人)代码
public interface IPerson {
/**
* 目标接口:人
*/
//购物
public void buyProduct();
//支付
public void payProduct();
}
具体的人的代码
/**
* 具体的目标对象
*
* @author acer
*
*/
public class ConcretePerson implements IPerson {
public void buyProduct() {
System.out.println("我要买港货iphone");
}
public void payProduct() {
System.out.println("支付6000");
}
}
代理类的代码
/**
* Proxy:代理对象
*
*/
public class Proxy implements IPerson {
// 持有目标对象的引用,代理商总要知道他给谁代理
private IPerson person;
public Proxy(IPerson person) {
this.person = person;
}
public void buyProduct() {
person.buyProduct();
}
public void payProduct() {
person.payProduct();
}
}
然后看下我们的main方法
public class Client {
public static void main(String[] args) {
ConcretePerson person=new ConcretePerson();
Proxy proxy=new Proxy(person);
proxy.buyProduct();
proxy.payProduct();
}
}
看下打印输出
我要买港货iphone
支付6000
-
看下统一建模图
从上面的图中可以看出,代理对象和具体对象处于同一层次,是关联关系,并且是单向关联。