设计模式静态-代理

代理要分为几个角色,代理人,被代理人,代理具体事物

代理具体事物:即要干什么事情,说的通俗点就是具体做事内容,比如说老板想做个记录下每个员工的基本信息系统,功能就只有插入和查询(代理具体事物),但是他又想做的好看点,体验好点,于是他找到产品经理,让产品经理去做产品设计(代理人),然后产品就找到开发,进行具体的开发流程了(目标对象)。

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}

 

 

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