设计模式从零开始——代理模式
来源:互联网 发布:qq空间个性域名注册 编辑:程序博客网 时间:2024/06/18 18:16
小时候家里来客人,老爸忙着招呼客人,抽不出空去买东西,每次都是让我去楼下小卖店买烟买酒,我当时特别喜欢做这件事,
因为每次老爸都会多给我几块钱,让我给自己买些零食:)。。。。。回想起来这种有些事自己不想做或者没时间做,找人帮忙去做,
应该就是我最早接触的代理模式。
所以代理模式的精髓就是,把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
- 设计模式从零开始——代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式从零开始——策略模式
- 设计模式从零开始——原型模式
- 设计模式——代理设计模式
- 设计模式——代理设计模式
- [从零开始学设计模式-java]代理模式(Proxy Pattern)
- 每日设计模式——代理模式
- 学习设计模式——代理模式
- java第三天/10.1
- struts2运行流程
- 理论篇~第六章 元数据
- JavaWeb-NewsServlet-大总结
- 每天一个linux命令(4):mkdir命令
- 设计模式从零开始——代理模式
- 标签
- 欢迎使用CSDN-markdown编辑器
- 死锁产生的原因和解决方法
- Nginx配置文件nginx.conf中文详解(史上最全!!!!)
- Java面试题全集(上)
- genymotion出现INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
- [PAT乙] 1019. 数字黑洞 (20)
- centos 创建svn多仓库,并用hooks同步更新