代理要分爲幾個角色,代理人,被代理人,代理具體事物
代理具體事物:即要幹什麼事情,說的通俗點就是具體做事內容,比如說老闆想做個記錄下每個員工的基本信息系統,功能就只有插入和查詢(代理具體事物),但是他又想做的好看點,體驗好點,於是他找到產品經理,讓產品經理去做產品設計(代理人),然後產品就找到開發,進行具體的開發流程了(目標對象)。
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}