代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。
在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式关于我的理解:首先,这个模式大家可以想象成大家平时给老师交作业这么一个场景。
普通同学:被代理的类,一般情况下,普通同学不会将作业交给老师,老师也不可能找同学一个一个的收作业
课代表:代理普通同学交作业,所以,普通同学的作业首先要交给课代表。 老师和同学之间的桥梁
老师:老师认识课代表,只需要让课代表收起作业,然后交给老师就可以了,这样老师就不必赵同学一个一个的收作业了。
下面给出详细代码实现,大家有什么不是很明白的可以留言。
HandInHomework.java
package com.luzhiming.proxy;
/**
* @author strungle E-mail: 645707787@QQ.com
* @version 创建时间:2013-6-12 下午10:09:46
*
* 抽象角色
*/
public interface HandInHomework {
//提交作业
public void handInHomework();
}
Student.java
package com.luzhiming.proxy;
/**
* @author strungle E-mail: 645707787@QQ.com
* @version 创建时间:2013-6-12 下午10:06:26
* 普通的学生类
*/
public class Student implements HandInHomework{
private String studentName;
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public Student(String studentName) {
this.studentName = studentName;
}
public void handInHomework()
{
System.out.println(studentName + "提交了作业");
}
}
StudentProxy.java
package com.luzhiming.proxy;
/**
* @author strungle E-mail: 645707787@QQ.com
* @version 创建时间:2013-6-12 下午10:02:23
*
* 学生的代理类,大家可以认为是课代表
*/
public class StudentPeoxy implements HandInHomework{
private Student student;
public StudentPeoxy(Student student) {
this.student = student;
}
@Override
public void handInHomework() {
System.out.println("我是课代表,下面是我帮忙"+student.getStudentName() +"交作业");
student.handInHomework();
System.out.println("我是课代表,我已经把"+student.getStudentName()+"的作业交完了");
}
}
UseCase.java 可以认为 UseCase就是老师
package com.luzhiming.proxy;
/**
* @author strungle E-mail: 645707787@QQ.com
* @version 创建时间:2013-6-12 下午10:15:53
*
*/
public class UseCase {
public static void main(String[] args) {
Student s1 = new Student("zhangsan");
StudentPeoxy sp = new StudentPeoxy(s1);
// 打印结果
/**
*
我是课代表,下面是我帮忙zhangsan交作业
zhangsan提交了作业
我是课代表,我已经把zhangsan的作业交完了
*/
sp.handInHomework();
}
}