代理模式

来源:互联网 发布:php获取对象的属性值 编辑:程序博客网 时间:2024/05/23 23:03

为其他对象提供一种代理,以控制对目标对象的访问;

需要声明代理对象和目标对象共同的接口;

代理对象和目标对象要实现相同的接口;

代理对象包含目标对象的引用,从而可以操作目标对象,同时实现了与目标对象相同的接口,以便任何时候可以替代目标对象,自己也可以定义额外的操作,实现了对目标的封装;

共同接口
public interface Woman {
public void makeEyeWithMan();
public void happyWithMan();
}

目标对象:

public class Sun implements Woman {
@Override
public void makeEyeWithMan() {
// TODO Auto-generated method stub
System.out.println("抛媚眼");
}
@Override
public void happyWithMan() {
// TODO Auto-generated method stub
System.out.println("和男人嗨");
}
}

代理对象:

public class Wang implements Woman {

        //保留对目标对象的引用
private Woman woman;
public Wang() {
this.woman = new Sun();// 默认作为Sun的代理 是现了与Sun相同的接口
}
public Wang(Woman woman) {
this.woman = woman; // 也可以是Woman类型对象的代理
}
@Override
public void makeEyeWithMan() {
// TODO Auto-generated method stub
this.woman.makeEyeWithMan();
}
@Override
public void happyWithMan() {
// TODO Auto-generated method stub
this.woman.happyWithMan();
}

public static void main(String[] args) {
        Wang wang;
        wang = new Wang();
        wang.makeEyeWithMan();
        wang.happyWithMan();
}
}

0 0