Typescript代理设计模式(模拟Android系统服务获取
2019-07-21 本文已影响0人
做实事的人
proxy.png
proxy-mini.png
环境:Webstorm
语言:Typescript
proxy-mini.png
代理设计模式所属类型:结构模式
代码直观感受:对一个对象进行一层封装,套一层。
优缺点,看看优缺点联想使用场景
优点 | 缺点 |
---|---|
提供上层访问,隐藏具体实现 | 代码会变复杂,因为有可能存在多层嵌套代理 |
对代理的真实对象进行管理 | |
当真实的对象不可用时,代理对象可以进行快速响应 | |
开闭原则,可以替换真实对象 |
具体实现:
/**
* 使用Typescript模拟一个简单的Android ActivityManager代理设计模式
*/
interface ActivityManager {
getService():void;
}
class ActivityManagerService implements ActivityManager {
getService(): void {
}
}
class ActivityManagerServiceStub implements ActivityManager{
getService(): void {
console.log('真正对象的操作=>获取到了电量管理服务实例!!')
}
}
class ActivityManagerServiceProxy implements ActivityManager{
//真正代理的对象
private realObject: ActivityManager;
//构造方法传递需要代理的对象
constructor(activityManager:ActivityManager) {
this.realObject = activityManager;
}
getService(): void {
if (this.checktoken()) {
this.realObject.getService();
this.recordAction();
}
}
private checktoken():boolean{
console.log('来自代理的操作=>校验当前的Token是否正确');
return true;
}
private recordAction(){
console.log('来自代理的操作=>获取服务完成以后进行一些记录操作');
}
}
//创建ActivityManagerServiceStub存根对象,并添加到代理中
const mActivityManagerServiceProxy = new ActivityManagerServiceProxy(new ActivityManagerServiceStub());
//开始获取服务
mActivityManagerServiceProxy.getService();
输出控制台
C:\Users\Aniu\Desktop\github_advanced>node Proxy.js
来自代理的操作=>校验当前的Token是否正确
真正对象的操作=>获取到了电量管理服务实例!!
来自代理的操作=>获取服务完成以后进行一些记录操作
外观设计模式VS代理设计模式
外观设计模式与代理设计有相似之处,区别就是外观设计模式它与真实对象没有一样的实现接口,所以也可联想到,外观真正代理的对象是没有办法进行替换的,更多的是用来做资源整合,整合多个对象的功能,比如有两个真实对象的功能需要进行配合整合,那么就适合使用外观设计模式,外观设计模式与功能的定义单纯从名字上来看是不太易于理解的,但是只要我联想到几个模块是平级的,需要联合使用,我就会想到使用外观模式进行资源整合管理。