05、人人都会设计模式:代理模式--Proxy

地址:
本文出自简书 人人都会设计模式
教程简介
正文
一、什么是代理模式 1、生活中的代理
1、微商代理
代理在生活中就太多了,比如微商,在朋友圈中很多时候都可以看到微商说城招全国代理「不需要货源,不需要启动资金,只需要一个电话就能做生意,好吧我口才不好,没有人家吹的好」,这类代理就是替卖家出售商品
2、追女孩
遥想当年情窦初开「初中的时候」,喜欢上了一个女子,可是迫于害羞,就给女孩子写了几封情书,买了一束花「但是自己没有那个贼胆送」,就让我们班里一个和女孩认识的朋友交给她,现在想来原来帮我送情书的女生就是我的代理呀「帮我完成我想要完成的事」~~嘻嘻 。话说谁还干类似的事,就在文章末尾点个赞
3、代销店等
其实就是现在的商店,以前小的时候听家乡人叫代销店,也是一种代理模式 。细细一想,跑业务的也是代理,律师也是代理,明星的助理就是代理,京东送货机器人是代理,共享”女友”,那个”女友”也是代理「你懂得」,等等等等 。不敢再说了,再说万物都成代理了「不好意思,又忘了吃药了」
2、程序中的代理
其实程序中使用的代理是非常多的,我们在编写 MVC 业务的时候就可以使用代理模式「可以让客户端使用代理仿问接口」,一般使用最多的是动态代理
代理模式的定义
所谓代理就是代表某个真实对象,也就是代理拿到真实对象的引用然后就可以实现真实对象中的功能了
代理模式的结构
角色类别说明
接口或抽象类
抽象出共同的属性
真实的类
实现了抽象角色
Prxoy
代理的类
实现了抽象角色,持有真实类的引用
代理模式简单的 UML
代理模式的分类
代理模式的实现方式「属于智能代理」
二、代理模式举例
1、帮忙追 MM
话说在高中期间,小明看上了我们班一位女同学,可是小明是一个害羞胆小的人「有贼心没贼胆」,于是小明跑到我的跟前:Chain 哥,我看上了咱们班的小倩,你能帮我追一下吗 ….。听小明巴拉巴拉一大堆,本着哥们义气的我非常爽快的答应了,就有了下面的追 MM 手段
简单的 UML
根据 UML 撸码--这里使用静态代理方法
public class MM {private String name ; // 姓名 private int age ;//年龄 private String address ; // 住址public MM(String name){this.name = name ;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}}
/*** Created by TigerChain* 追 MM 的方法,是一个抽象角色*/public interface ZhuimmWay{// 送花void giveFlowers() ;// 写情书void writeLoveLetters() ;// 买衣服void buyClothes() ;// 干一些其它的事void doSomthing() ;}
/*** Created by TigerChain* 主人公小明,真正的角色*/public class XiaoMing implements ZhuimmWay {// 要追的 MMprivate MM mm ;public void like(MM mm){this.mm = mm ;}@Overridepublic void giveFlowers() {System.out.println(mm.getName()+" 送给你一朵花");}@Overridepublic void writeLoveLetters() {System.out.println(mm.getName()+" 给你八封情书");}@Overridepublic void buyClothes() {System.out.println(mm.getName()+" 这是给你买的衣服");}@Overridepublic void doSomthing() {System.out.println("给 "+mm.getName()+"说好听的话");System.out.println("给 "+mm.getName()+"洗衣服,买单等等一系列手段");}}