設計模式靜態-代理

代理要分爲幾個角色,代理人,被代理人,代理具體事物

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

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}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章