小时候家里来客人,老爸忙着招呼客人,抽不出空去买东西,每次都是让我去楼下小卖店买烟买酒,我当时特别喜欢做这件事,
因为每次老爸都会多给我几块钱,让我给自己买些零食:)。。。。。回想起来这种有些事自己不想做或者没时间做,找人帮忙去做,
应该就是我最早接触的代理模式。
所以代理模式的精髓就是,把A要做的事情,不管出于什么考虑,转交给B去做,最终达成同样的目的。
通常适用于:远程代理、虚拟代理、安全代理、智能代理等等,基于我之前做的项目经验,接触最多的就是做网络爬虫时使用IP代理池,
随机切换使用不同代理,防止IP被网站屏蔽。
接下来以机器人代替人来做家务这一情景模拟代理模式,以下是主要代码:
房子类,用来指定家务在哪里做:
public class Room {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
具体家务的抽象方法:
public interface IBehavior {
public void laundry();
public void cook();
public void sweep();
}
人做家务:
public class People implements IBehavior {
Room room;
String name;
public People(Room room) {
this.room = room;
}
public People(Room room, String name) {
this.room = room;
this.name = name;
}
@Override
public void laundry() {
if (Strings.isNullOrEmpty(name)) {
System.out.println(room.getName() + " 洗衣服");
} else {
System.out.println(name + " 在 " + room.getName() + " 洗衣服");
}
}
@Override
public void cook() {
if (Strings.isNullOrEmpty(name)) {
System.out.println(room.getName() + " 做饭");
} else {
System.out.println(name + " 在 " + room.getName() + " 做饭");
}
}
@Override
public void sweep() {
if (Strings.isNullOrEmpty(name)) {
System.out.println(room.getName() + " 扫地");
} else {
System.out.println(name + " 在 " + room.getName() + " 扫地");
}
}
}
机器人做家务:
public class Robot implements IBehavior {
People people;
String name;
public Robot(Room room, String name) {
people = new People(room);
this.name = name;
}
@Override
public void laundry() {
System.out.print(name + " 在 ");
people.laundry();
}
@Override
public void cook() {
System.out.print(name + " 在 ");
people.cook();
}
@Override
public void sweep() {
System.out.print(name + " 在 ");
people.sweep();
}
}
客户端代码:
public class Controller {
public static void main(String[] args) {
Room room = new Room();
room.setName("大冰的小屋");
System.out.println("===========代理机器人做家务=============");
Robot robot = new Robot(room, "机器人");
robot.laundry();
robot.cook();
robot.sweep();
System.out.println("\n===========人做家务=============");
People people = new People(room,"Bruce");
people.laundry();
people.cook();
people.sweep();
}
}
执行结果截图: