代理要分为几个角色,代理人,被代理人,代理具体事物
代理具体事物:即要干什么事情,说的通俗点就是具体做事内容,比如说老板想做个记录下每个员工的基本信息系统,功能就只有插入和查询(代理具体事物),但是他又想做的好看点,体验好点,于是他找到产品经理,让产品经理去做产品设计(代理人),然后产品就找到开发,进行具体的开发流程了(目标对象)。
1. 代理具体事物,需求是啥?老板说的(老板)
那就是查询和插入。
public interface People {
public void add(Object people);
public Object findPeople(String name);
}
2.目标对象 ,具体咋插入和查询啊! (开发)
class PeopleImpl implements People {
List<Object> lists=new ArrayList<>();
private static final String TAG = "PeopleImpl";
@Override
public void add(Object people) {
// Log.d(TAG, "add: " + people.toString());
lists.add(people);
System.out.println("add: " + people.toString());
}
@Override
public Object findPeople(String name) {
for (Object o:lists ) {
Student student=(Student)o;
if (name.equals(student.name)) {
// Log.d(TAG, "findPeople: " + student.toString());
System.out.println("findPeople: " + student.toString());
return student;
}
}
return null;
}
}
3.代理人,老板想干的事太多了,但又不是特别细致,所以交给产品来仔细琢磨咋干,所以产品就成为了这件事情的代理人(产品)
public class PeopleImplProxy implements People{
People people;
public PeopleImplProxy(People people) {
this.people=people;
}
@Override
public void add(Object people) {
this.people.add(people);
}
@Override
public Object findPeople(String name) {
return this.people.findPeople(name);
}
}
然后东西就这样做出来了,现在只需要将目标对象输入给代理人,就能把事情干完了。
PeopleImpl people=new PeopleImpl();
PeopleImplProxy peopleImplProxy=new PeopleImplProxy(people);
peopleImplProxy.add(new Student("小明",30));
peopleImplProxy.findPeople("小明");
public class Student {
String name;
int arg;
public Student(String name, int arg) {
this.name = name;
this.arg = arg;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getArg() {
return arg;
}
public void setArg(int arg) {
this.arg = arg;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", arg=" + arg +
'}';
}
}
开发将具体实现弄好了,然后交给产品去具体的操作,现在老板说把小明给我放到系统中去,然后通过产品开发出的程序就操作好了。
代码执行结果:
add: Student{name='小明', arg=30}
findPeople: Student{name='小明', arg=30}