本来打算上个星期就写代理模式的,但是经过很久的考虑也没有想到用什么样的例子能把代理模式表达清楚,今天无意中想到权限的问题:就是一个Android应用,具有不同权限的人登陆后能看到不同效果界面。
上面的这些是我自己的理解,如果有理解错的地方,希望大家多多批评指正,现在开始正文。
代理模式,根据名字理解就是用做一件事情的时候,用另一种方式代替自己去完成。由于时间仓促,就不做效果图了,先上个Java运行出来的图。根据用户不同的style来输出这个user所代表的类型。
根据上面的代码,从上向下以此建立class,先建立用户类,就是一个Javabean:
public class User {
private String userName;
private String style;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getStyle() {
return style;
}
public void setStyle(String style) {
this.style = style;
}
@Override
public String toString() {
return "User [userName=" + userName + ", style=" + style + "]";
}
}
然后建立代理类,大家会说,怎么只有代理类,没有看到实际的那个类呢。这里实际的那个类是在代理类中初始化的,大家看代码就会明白:
public class Proxy implements Subject {
private Subject subject;
private User user;
public Proxy(User user) {
this.user = user;
}
@Override
public void operate() {
if (user.getStyle().equals("1")) {
if (subject instanceof ManagerSubject) {
} else {
subject = new ManagerSubject();
}
} else if (user.getStyle().equals("0")) {
if (subject instanceof UserSubject) {
} else {
subject = new UserSubject();
}
} else if (user.getStyle().equals("2")) {
if (subject instanceof VisitorSubject) {
} else {
subject = new VisitorSubject();
}
}
subject.operate();
}
}
这里有了一些在test类中没有的类,所以我们也得把他们建出来,因为类的内容都是一样的,只是类名不同。
public interface Subject {
public void operate();
}
public class ManagerSubject implements Subject {
@Override
public void operate() {
System.out.println("我是管理员类哦");
}
}
public class UserSubject implements Subject {
@Override
public void operate() {
System.out.println("我是用户类哦");
}
}
public class VisitorSubject implements Subject {
@Override
public void operate() {
System.out.println("我是游客哦");
}
}
以上就是我对代理模式简单的理解,我知道代理模式有很多的样式,但是本人水平有限,只能给大家提供我所理解的代理模式。 我自认为上面有很多缺陷需要修改,所以我希望大家多批评指正,共同进步。