美文网首页
代理模式

代理模式

作者: 蜗牛ICU | 来源:发表于2019-04-12 23:42 被阅读0次

    前言:

    因为现在设计模式在网络上已经泛滥,但是还是有好多程序员不能够灵活的运用设计模式,这个是对设计模式简单的介绍,因为网络上比较多类似的文章,所以本人就从网络上抄了一部分,等23种设计模式整理完成之后会根据实际的需求利用设计模式在代码中设计一些开源的插件,请继续关注。
    原版[菜鸟教程]

    简介:

    在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。

    在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

    使用时机:
    • 意图:为其他对象提供一种代理以控制对这个对象的访问。

    • 主要解决:在直接访问对象时带来的问题。

    • 何时使用:想在访问一个类时做一些控制。

    • 如何解决:增加中间层。

    • 关键代码:实现与被代理类组合。

    场景:
    • spring aop
    优点:
    • 1、职责清晰。
    • 2、高扩展性。
    • 3、智能化。
    缺点:
    • 1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
    • 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
    案例:

    第一步: 创建接口

    public interface Image {
        void display();
    }
    

    第二步: 创建实现接口的类

    public class ImageImpl  implements  Image{
    
         private String fileName;
         
           public ImageImpl(String fileName){
              this.fileName = fileName;
              loadFromDisk(fileName);
           }
         
           @Override
           public void display() {
              System.out.println("实现 Displaying " + fileName);
           }
         
           private void loadFromDisk(String fileName){
              System.out.println("实现 Loading " + fileName);
           }
    
    }
    
    

    第三步: 创建代理類

    public class ProxyImage implements  Image{
        private ImageImpl imageImpl;
           private String fileName;
         
           public ProxyImage(String fileName){
              this.fileName = fileName;
           }
         
           @Override
           public void display() {
              if(imageImpl == null){
                  imageImpl = new ImageImpl(fileName);
              }
              imageImpl.display();
           }
    }
    

    第四步: 調用

    public class Main {
    
        public static void main(String[] args) {
            Image image = new ProxyImage("test_10mb.jpg");
             
              image.display(); 
              System.out.println("");
              image.display();  
        }
    }
    

    第五步: 输出结果

    实现 Loading test_10mb.jpg
    实现 Displaying test_10mb.jpg
    
    实现 Displaying test_10mb.jpg
    
    

    相关文章

      网友评论

          本文标题:代理模式

          本文链接:https://www.haomeiwen.com/subject/zrskwqtx.html