`

2. 结构型模式 (3) 代理模式

阅读更多
2. 结构型模式 (3) 代理模式

代理模式(Proxy Pattern)中,一个类代表另一个类的功能。创建具有现有对象的对象,以便向外界提供功能接口。

优点:
1. 职责清晰。
2. 高扩展性。
3. 智能化。

缺点:
1. 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
2. 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。


1. 代理模式

package com.andrew.pattern0203.proxy.model01;
public interface Image {
    void display();
}


package com.andrew.pattern0203.proxy.model01;
public class RealImage implements Image {
    private String fileName;
    public RealImage(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);
    }
}


package com.andrew.pattern0203.proxy.model01;
public class ProxyImage implements Image {
    private RealImage realImage;
    private String fileName;
    public ProxyImage(String fileName) {
        this.fileName = fileName;
    }
    @Override
    public void display() {
        if (null == realImage) {
            realImage = new RealImage(fileName);
        }
        realImage.display();
    }
}


package com.andrew.pattern0203.proxy.model01;
/**
 * 1. 代理模式
 * 
 * @author andrew
 * @date 2018/07/01
 */
public class Client {
    public static void main(String[] args) {
        Image image = new ProxyImage("test_img.jpg");
        image.display();
        System.out.println("");
        image.display();
    }
}
运行结果:
Loading:test_img.jpg
Displaying:test_img.jpg

Displaying:test_img.jpg


2. Java中代理模式

public abstract class Subject{
    public abstract void request();
}


public class RealSubject extends Subject{
    public void request(){
        System.out.println("From real subject.");
    }
}


public class ProxySubject extends Subject{
    private RealSubject realSubject; //代理角色内部引用了真实角色
    public void request(){
        this.preRequest(); //在真实角色操作之前所附加的操作
        if(null == realSubject){
            realSubject = new RealSubject();
        }
        realSubject.request(); //真实角色所完成的事情
        this.postRequest(); //在真实角色操作之后所附加的操作
    }
    private void preRequest(){
        System.out.println("pre request");
    }
    private void postRequest(){
        System.out.println("post request");
    }
}


public class Client{
    public static void main(String[] args){
        Subject subject = new ProxySubject();
        subject.request();
    }
}
运行结果:
pre request
From real subject.
post request
分享到:
评论

相关推荐

    结构型模式之代理模式(Proxy)

    代理模式是一种设计模式,属于结构型模式之一,其主要目的是为其他对象提供一个代理,以控制对该对象的访问。在实际应用中,代理模式能够帮助我们实现如下的功能: 1. 远程代理:代理对象可以代表一个位于远程系统...

    java 23种设计模式.zip

    2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略...

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    设计模式分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**关注的是对象的创建。共有五种创建型模式: 1. **工厂方法模式**:它定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法...

    23种设计模式-结构型模式.docx

    本文将深入探讨其中的两种结构型模式:适配器模式和代理模式。 1. 适配器模式 适配器模式是一种将两个不兼容的接口进行转换的模式,使得原本无法协同工作的类能够一起工作。它主要分为类适配器模式和对象适配器...

    23种设计模式 (创建型,结构型,行为型)

    结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight ...

    c++设计模式-结构型模式-代理模式

    代理模式是一种在面向对象设计中广泛应用的结构型设计模式,它提供了一种对目标对象进行间接访问的方式,使得客户端可以通过代理对象与真实对象进行交互,而无需直接接触真实对象。这样做的好处包括增加灵活性、控制...

    JAVA-设计模式-结构型模式-代理模式

    JAVA-设计模式-结构型模式-代理模式

    [结构型模式] 代理模式的理解

    代理模式是一种设计模式,属于结构型模式的一种,它在软件设计中扮演着非常重要的角色。代理模式的主要目的是为其他对象提供一种代理以控制对这个对象的访问。在代理模式中,代理类作为真实对象的代表,它在客户端和...

    新版设计模式手册 通俗的例子讲述设计的方法 1创建型模式 2结构型模式 3 行为模式 详细的设计说明

    这个“新版设计模式手册”深入浅出地介绍了设计模式的三大类:创建型模式、结构型模式和行为模式,为开发者提供了一套详细的设计说明。 一、创建型模式 创建型模式主要关注对象的创建过程,它们的目标是使得对象的...

    结构型模式的几个模式

    本篇文章将重点讨论结构型模式中的几种关键类型:外观模式、代理模式、适配器模式以及桥接模式。 #### 二、结构型模式简介 结构型模式主要关注如何将类或对象组合成更大的结构。这类模式强调的是如何构建与组织类...

    设计模式(创建型、结构型、行为型)

    结构型模式是指在软件设计中,如何将类组合在一起去构成更大的结构的模式。它主要解决了类之间的组合问题,包括适配器、桥接、组合、装饰、外观、飞weight和代理等七种模式。 行为型模式是指在软件设计中,如何定义...

    设计模式2-结构型模式.doc

    在本文中,我们将探讨几种结构型设计模式,包括适配器模式、桥接模式、外观模式、享元模式、代理模式和装饰器模式。 1. **适配器模式**: - 适配器模式用于连接两个不兼容的接口,使得原本不能一起工作的类可以...

    设计模式之结构型模式

    结构型模式不仅限于适配器模式和桥接模式,还包括代理模式、装饰模式、外观模式、组合模式和享元模式等。这些模式都致力于优化系统结构,提升代码的可复用性和可维护性。 4. **学习与实践**: 对于初学者来说,理解...

    C#设计模式源代码1.简单工厂模式 2.工厂方法模式 ...11种

    9. **代理模式**:结构型模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式常用于远程代理、虚拟代理、安全代理以及智能引用等。 10. **外观模式**:也称为门面模式,结构型模式之一,提供了一个...

    设计模式_结构型_代理模式.md

    设计模式_结构型_代理模式

    设计模式原理与应用之结构型模式.pptx

    结构型模式是设计模式的一种分类,它关注如何组合类和对象,构建更大的结构。本篇主要讨论了七种结构型模式:Adapter、Bridge、Composite、Decorator、Façade、Flyweight和Proxy。 1. **Adapter模式**: - 适配器...

    Java设计模式之结构型模式源码以及文档

    结构型模式可以分为七种:适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。这些模式在不同的场景下有着各自的用途,它们可以帮助我们构建出灵活、可扩展的系统。 适配器模式允许两个不...

    9. 结构性设计模式小结1

    装饰器模式属于结构型模式,它允许在运行时动态地给一个对象添加新的职责或功能,而不必修改原有类的代码。装饰器模式通过包装(包裹)原始对象并实现相同的接口,可以在不改变对象本身的情况下增加其行为。这种...

Global site tag (gtag.js) - Google Analytics