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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,137评论 1 32
  • javascript设计模式与开发实践 设计模式 每个设计模式我们需要从三点问题入手: 定义 作用 用法与实现 单...
    穿牛仔裤的蚊子阅读 4,124评论 0 13
  • 数据下载 sra下载ncbi数据 star 比对 star软件的简单使用star官方文档 gatk流程
    昌平厄齐尔阅读 176评论 0 0
  • 姓名:周玉霞 六项精进:327期学员 公司:温州易道伟业企业管理咨询有限公司 地点:河南省洛阳市汝阳县 【日精进打...
    Anne玉阅读 151评论 0 0