Typescript代理设计模式(模拟Android系统服务获取)

proxy.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代理设计模式

外观设计模式与代理设计有相似之处,区别就是外观设计模式它与真实对象没有一样的实现接口,所以也可联想到,外观真正代理的对象是没有办法进行替换的,更多的是用来做资源整合,整合多个对象的功能,比如有两个真实对象的功能需要进行配合整合,那么就适合使用外观设计模式,外观设计模式与功能的定义单纯从名字上来看是不太易于理解的,但是只要我联想到几个模块是平级的,需要联合使用,我就会想到使用外观模式进行资源整合管理。

你可能感兴趣的:(Typescript代理设计模式(模拟Android系统服务获取))