IT铁人DAY 20-Proxy 代理模式

  今天要介绍的模式是属於结构型模式的一种,此模式的名称我想大多数的人都听过或是知道它是做甚麽用的,而它所做的事情就像它的名子一样,那就是Proxy!


问题情境与解析

  代理模式它在做的事情就是「控制和管理对所有保护的物件的访问行为」,在现实生活中,可以把信用卡当作是我们银行帐户中的代理,它能够代替现金使用,同时也能够在需要的时候提供一种获取现金的一种方式。

  再举一个例子,学校的网路通常都会限制某些网站不能存取,像是社群网站、色情网站等等,好让学生不在电脑课上乱逛有的没的的网站,而这就是Proxy的作用。

  首先它会先检查你要连线的主机,是否为它的限制站点列表中的其中之一,如果是的话可能就会被限制存取或是直接跳回首页,总之就是不会让你连线到被限制的站点;反之,你的要求就会被代理接受,就可以连线到你想要的网站。

Class Diagram

https://ithelp.ithome.com.tw/upload/images/20211005/201407439l7Co8jR95.png

Skeleton Code

interface Service {
    public void operation();
}

class ConcreteService implements Service {
    public void operation() {
        // do something
    }
}

class Proxy implements Service {
    Service service = new ConcreteService();
    
    public Proxy(Service service) {
        this.service = service;
    }
    
    public boolean checkAccess() {
        // verifyi access authority
    }
    
    public void operation() {
        if(checkAcess()) {
            service.operation();
        }
    }
}

  代理模式最大的好处就是它的安全性,可以避免大量的程序重复,间接提高了应用程序的效能,不过因为需要多一步检查的作业,也就可能会造成服务响应的延迟,而且需要新增许多新的类别,因此程序码会变得比较复杂。


除此之外,也欢迎大家走走逛逛关於我们团队夥伴的文章

lu23770127 - SASS 基础初学三十天

10u1 - 糟了!是世界奇观!

juck30808 - Python - 数位行销分析与 Youtube API 教学

SiQing47 - 前端?後端?你早晚都要全端的,何不从现在开始?


<<:  第 20 集:Bootstrap 客制化 Sass variable

>>:  [DAY20] 用 Azure Machine Learning SDK 建立 Dataset

系统分析师的养成之路—案例分享(3)

其实写前一篇的案例主要是提醒後进们在处理收到的需求时,真的需要谨慎地确认,否则就会像我一样面临几乎打...

【Day 21】Algorithm - Find Cycle in Directed Graph

这题真的需要花一点功夫,题目并不难懂,但是不能用直观的方式去写,可以上网搜寻关键字「find cyc...

[Day 10] 简单的单元测试实作(四)-关於程序的问题,一律建议重构

为了要让程序码更简洁、更容易懂、及更容易维护, 我们今天要开始将之前的测试程序重构,(虽然好像才刚开...

DAY8:基本元件及画面设计实作

接下来要做一个简单的剪刀石头布的小小实作,会用到上述所介绍到的,那就开始罗! 首先,我们要将专案一开...

[Day_17]回圈与生成式 - (3)

巢状回圈 巢状回圈并非新的程序结构,只是回圈范围内又有回圈,巢状回圈可以有好几层,巢状回圈与单层回圈...