zoukankan      html  css  js  c++  java
  • 【代理】代理模式之静态代理

    代理模式(Proxy Pattern)是程序设计中的一种常见的设计模式,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不合适或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

    UML类图:

    组成:

    抽象角色:通过接口或抽象类声明真实角色实现的业务方法。如图中Subject。

    代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。

    真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
    示例:
    抽象角色(接口):
    1 package com.demo;
    2 
    3 public interface Subject {
    4     
    5     public void select();
    6     
    7     public void save();
    8 }

    真实角色:

     1 package com.demo;
     2 
     3 public class RealSubject implements Subject {
     4 
     5     @Override
     6     public void select() {
     7         System.out.println("正在执行真实实现类的select()方法");
     8     }
     9 
    10     @Override
    11     public void save() {
    12         System.out.println("正在执行真实实现类的save()方法");
    13     }
    14  }

    代理角色:

     1 package com.demo;
     2 
     3 public class Proxy implements Subject {
     4 
     5     Subject target;
     6 
     7     public Proxy(Subject target) {
     8         this.target = target;
     9     }
    10 
    11     @Override
    12     public void select() {
    13         target.select();
    14     }
    15 
    16     @Override
    17     public void save() {
    18         target.save();
    19         System.out.println("正在执行增强实现.....");
    20     }
    21 }

    测试类:

    1 package com.demo;
    2 
    3 public interface ProxyTest {
    4     public static void main(String[] args) {
    5         Subject subject = new Proxy(new RealSubject());
    6         subject.select();
    7         subject.save();
    8     }
    9 }

    运行结果:

    总结:
    优点:
    代理对象将客户端与目标对象分离,目标对象只需要关注自身业务逻辑,在一定程度上降低了系统的耦合度。
    代理对象可以在客户端和目标对象中启一个中介对象,可以对目标对象进行一定的保护,也可以对功能进行一定的扩展增强。
    缺点:
    代理对象的一个接口只服务于一种类型的对象,如果要代理的类型很多,势必要为每一种类型的方法都进行代理,静态代理在程序规模稍大时就无法胜任了。
    如果接口增加一个方法,除了所有的实现类需要实现这个方法外,所有代理类也需要实现此方法,增加了代码的可维护性。
    但是以上缺点,可由动态代理解决。
    作者:墨猴
    感觉对您有帮助的话,就点个推荐吧!~( ̄▽ ̄)~*
  • 相关阅读:
    百度地图API-自定义图标覆盖物
    笔记-前端学习路线
    当div自适应的高度超过预设的高度的时候出现滚动条的办法
    有关前端的书籍
    js-方法
    正在进行中
    ARM的启动和中断向量表
    ARM中的总线
    NOR FLASH与NAND FLASH的区别
    ARM流水线关键技术分析与代码优化
  • 原文地址:https://www.cnblogs.com/mohou/p/12488738.html
Copyright © 2011-2022 走看看