CH09_避免浪费

2024-01-10 14:28:10

Flyweight模式

享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。

类图

在这里插入图片描述

说明

  • Flyweight(轻量级)

    按照通常方式编写程序会导致程序变重,所以如果能够共享实例会比较好,而Flyweight角色表示的就是那些实例会被共享的类。

  • FlyweightFactory(轻量级工厂)

    FlyweightFactory角色是生成Flyweight角色的工程。在工厂中生成Flyweight角色可以实现共享实例。

  • Client(请求者)

    Client角色使用FlyweightFactory角色来生成Flyweight角色。

其他

享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本都是相同的,有时就能够受大幅度地减少需要实例化的类的数量。如果能把那些参数移到类实例的外面,在方法调用时将它们传递进来,就可以通过共享大幅度地减少单个实例的数目。

Proxy模式

代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。

类图

在这里插入图片描述

说明

  • Subject(主体)

    Subject角色定义了使Proxy角色和RealSubject角色之间具有一致性的接口。由于存Subject角色,所以Client角色不必在意它所使用的究竟是Proxy角色还是RealSubject角色。

  • Proxy(代理人)

    Proxy角色尽量处理来自Client角色的请求。只有当自己不能处理时,它才会将工作交给RealSubject角色。Proxy角色只有在必要时才会生成RealSubject角色。Proxy角色实现了在Subject角色中定义的接口(API)

  • RealSubject(实际的主体)

    RealSubject角色会在Proxy角色无法胜任工作时出场。它与Proxy角色一样,也实现了在Subject角色中定义的接口(API)

  • Client(请求者)

    使用Proxy模式的角色,Client角色并不包含在Proxy模式中。

模式的应用

  • 远程代理

    为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。典型应用场景有WebService,RPC等。

  • 虚拟代理

    根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。典型案例:浏览器打开一个很大的HTML网页时,网页中有何多的文字和图片,浏览器会先渲染文字部分展示给用户,而图片则是在后台下载完后再逐个渲染。

  • 安全代理

    用来控制真实对象访问时的权限(功能)。典型案例:经典的三层结构,一般数据层封装了对数据库的接口;业务层只能调用数据层封装的功能接口,不能直接访问数据,不能执行任意的SQL脚本。

文章来源:https://blog.csdn.net/qq_27953479/article/details/135500630
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。