设计模式从零开始——代理模式

小时候家里来客人,老爸忙着招呼客人,抽不出空去买东西,每次都是让我去楼下小卖店买烟买酒,我当时特别喜欢做这件事,

因为每次老爸都会多给我几块钱,让我给自己买些零食:)。。。。。回想起来这种有些事自己不想做或者没时间做,找人帮忙去做,

应该就是我最早接触的代理模式。

 

所以代理模式的精髓就是,把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();
    }
}

 

 

 

 

 

执行结果截图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值