定义:为另一个对象提供一个替身或者占位符以控制这个对象的访问。
通常代理模式有三个角色1.抽象接口(定义了代理对象和真实处理事务的对象所需实现的方法)2.真实事务处理对象3.代理对象。
案例演示:这次采用打印机的比喻来对代理模式进行简单的解释。
1.首先定义打印机接口。
public interface DayinJi {
// 打印文字
void outZi();
// 打印图片
void outImage();
}
2.定义真实事务处理打印机对象
public class DaYnJiIml implements DayinJi{
private static DaYnJiIml dayinji;
// 构造私有化仅可以通过getInstance()获取唯一对象
private DaYnJiIml(){}
public static DaYnJiIml getInstance(){
if(dayinji==null){
synchronized (DaYnJiIml.class) {
if(dayinji==null){
dayinji=new DaYnJiIml();
}
}
}
return dayinji;
}
@Override
public void outZi() {
// TODO Auto-generated method stub
System.out.println("打印文字");
}
@Override
public void outImage() {
// TODO Auto-generated method stub
System.out.println("打印图片");
}
}
3.定义代理打印机
public class DaYinJiProxy implements DayinJi{
private DaYnJiIml mDaYinJi;
public DaYinJiProxy() {
// TODO Auto-generated constructor stub
// 获取打印机对象实例
mDaYinJi=DaYnJiIml.getInstance();
}
@Override
public void outZi() {
// TODO Auto-generated method stub
mDaYinJi.outZi();
}
@Override
public void outImage() {
// TODO Auto-generated method stub
mDaYinJi.outImage();
}
}
4.通过实现代理打印机来进行打印
public class Clint {
public static void main(String[] args) {
DaYinJiProxy daYinJiProxy=new DaYinJiProxy();
daYinJiProxy.outImage();
daYinJiProxy.outZi();
}
}
效果展示