`

[原]代理模式-智能引用代理

阅读更多

[关键字]:java,design pattern,设计模式,《Java与模式》学习,Proxy Pattern,代理模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com) http://wintys.blogjava.net
[正文]:

智能引用代理:



 


SmartProxyTest.java(并不属于pattern.proxy.smart包):

import pattern.proxy.smart.*;
/**
 * 智能引用代理:Smart Proxy
 *
 * 在搜索的时需要进行进行权限认证和使用计数
 *
 * @version 2009-6-29
 * @author Winty(wintys@gmail.com)
 */
public class SmartProxyTest{
    public static void main(String[] args){
        String result;
        Searcher searcher;

        //未授权访问
        searcher = new ProxySearcher("anonymous");
        result = searcher.search("abc");
        System.out.println("result:" + result);

        //授权访问
        searcher = new ProxySearcher("admin");
        result = searcher.search("xyz");
        System.out.println("result:" + result);
    }
}



Searcher.java:

package pattern.proxy.smart;
/**
 * 搜索
 * @version 2009-6-29
 * @author Winty(wintys@gmail.com) http://wintys.blogjava.net
 */
public interface Searcher{
    /**
     * @param value 要搜索的内容
     */
    public String search(String value);
}


RealSearcher.java:

package pattern.proxy.smart;
/**
 * 实际执行搜索的类。
 * 为了避免客户端直接使用,本类没有设置为public
 * @version 2009-6-29
 * @author Winty(wintys@gmail.com) http://wintys.blogjava.net
 */
class RealSearcher implements Searcher{
    @Override
    public String search(String value){
        //在这里可以根据value到数据库中执行实际搜索,
        //此只是示例代码。
        String result = "sample result";

        return result;
    }
}


ProxySearcher.java:

package pattern.proxy.smart;
/**
 * 代理搜索
 * 将搜索传递给RealSearcher并对调用进行验证和计数
 *
 * @version 2009-6-29
 * @author Winty(wintys@gmail.com) http://wintys.blogjava.net
 */
public class ProxySearcher implements Searcher{
    private Searcher searcher;
    private String user;

    public ProxySearcher(String user){
        searcher = new RealSearcher();
        this.user = user;
    }

    @Override
    public String search(String value){

        if(AccessValidator.validate(user)){
            String result = searcher.search(value);
            UsageLogger.log(user , value);
            
            return result;
        }

        return null;
    }
}

/**
 * 对客户端的访问进行验证
 */
class AccessValidator{

    public static boolean validate(String user){
        boolean permission = false;

        if("admin".equals(user))
            permission = true;

        return permission;
    }

}


/**
 * 访问计数
 */
class UsageLogger{
    /**
     * @param user 用户名
     * @param value 搜索的内容
     */
    public static void log(String user , String value){
        String sql;
        sql = "INSERT INTO usage(user , value)  values('";
        sql += user + "' , '" + value + "')";
        //执行SQL: stmt.executeUpdate(sql);   
    }
}


运行结果:
result:null
result:sample result

  • 大小: 58.6 KB
分享到:
评论

相关推荐

    Java设计模式-代理模式例子

    代理模式的核心思想是为一个对象提供一个替身,这个替身即代理对象,代理对象控制对原对象的访问。在Java中,代理模式主要有静态代理和动态代理两种实现方式。 1. 静态代理:在编译时就已经确定了代理类与目标类的...

    设计模式--代理模式

    8. **智能引用代理**:在对象被引用时执行附加操作,例如计数引用次数或执行清理任务。 代理模式的使用可以使系统更加灵活,能够添加新的功能或控制,同时保持原有对象的简洁性。在软件设计中,尤其是在大型系统中...

    设计模式-代理模式

    5. **智能引用代理**:除了保持对目标对象的引用,还可以提供一些额外的信息,如引用计数。 在实际应用中,苹果的UIKit框架广泛使用了代理模式,如UITableViewDataSource和UITableViewDelegate,以及UIWebView的...

    2 代理模式-MOOC课程内容.pdf

    4. 智能引用代理:可以添加一些额外的操作,比如引用计数、对象访问计数、对象创建日志记录等。 代理模式的适用场景包括: - 当客户不想或者不适合直接引用一个对象,或是访问一个对象存在困难时,可以使用代理模式...

    2 代理模式-课程内容.rar

    代理模式的核心思想是为一个对象提供一个代理,这个代理对象作为原对象的替代品,可以控制对原对象的访问,或者在调用原对象的基础上增加额外的功能。代理可以在客户端和目标对象之间起到中介的作用,它可以实现如...

    代理模式+智能指针SharePtr代码

    在你提供的代码中,“代理模式”的实现可能是通过创建一个代理类,这个代理类持有对真实对象的引用,并处理与真实对象相关的请求。代理类可以添加额外的逻辑,比如验证、日志记录或缓存策略。代理类通常具有与真实...

    JAVA设计模式例程-代理模式

    - **智能引用**:提供额外的信息,如对象的状态,或者在访问对象时执行特定的操作。 4. **Java中实现代理模式** 在Java中,我们可以利用接口来实现静态代理。首先定义一个接口,然后让目标对象和代理对象都实现这...

    设计模式之代理模式proxy

    - **智能引用(Smart Reference)**: 除了保持对真实对象的引用外,还提供额外的管理功能,如计数引用次数,以便在没有引用时自动删除对象。 ### 3. 代理模式的优点 1. **控制访问**: 代理可以控制对真实对象的访问...

    设计模式实现——代理模式

    - **智能引用**:除了保持对目标对象的引用外,还提供一些附加操作,如计数、缓存等。 代理模式的优点: - **扩展性**:可以在不修改原有代码的情况下,通过代理类添加新的功能。 - **解耦**:代理对象可以隔离...

    代理模式实例

    代理模式是一种设计模式,它是结构型模式的一种,主要用于在对象之间提供一个代理以控制对原对象的访问。在这个实例中,我们看到的是如何通过代理模式来实现某种功能的增强或控制。下面将详细讲解代理模式的基本概念...

    设计模式之代理模式demo

    - **智能引用**:在Java中,代理对象可以用来实现弱引用或软引用,避免内存泄漏。 代理模式有多种实现方式,包括静态代理和动态代理。静态代理是在编译时就确定了代理关系,而动态代理则可以在运行时动态生成代理类...

    代理模式(Proxy Pattern) 1. 概述 1.1 基本概念 1.2 为什么需要代理模式 1.3 代理模式的四个角色 2. 代理模式的类型 2.1 静态代理 2.2 JDK动态代理

    7.5 智能引用(Smart Reference) 8. 代理模式的优缺点总结 8.1 优点 8.2 缺点 9. 常见问题与解答 9.1 为什么要使用代理模式而不是直接修改原始类? 9.2 静态代理与动态代理应该如何选择? 9.3 Spring AOP使用的是...

    11-代理模式.pdf

    5. **智能引用代理**:当真实对象的生命周期依赖于代理时,可以使用智能引用代理。智能引用代理可以跟踪真实对象的状态,并确保当不再需要时,真实对象被正确地销毁。 #### 四、代理模式的优点 - **增强功能**:...

    设计模式C++学习之代理模式(Proxy)

    4. **智能引用**:在C++中,智能指针(如`std::shared_ptr`、`std::unique_ptr`)就是一种代理,它们提供了对原始指针的封装,增加了垃圾回收等功能。 在C++实现代理模式时,通常会涉及到以下关键组件: - **...

    面向对象23种设计模式之代理模式

    - **智能引用**:代理对象可以提供额外的信息或服务,比如统计对象的使用次数。 在`AdapterPattern`这个文件中,虽然名字提及的是适配器模式,但它可能是误传或者包含了关于代理模式的示例。适配器模式是一种结构型...

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

    4. 智能引用:代理对象可以增加额外的统计、跟踪等信息,而不影响原始对象的使用。 在代理模式中,通常有三个关键角色: 1. 目标对象(RealSubject):代理模式所要控制的对象,实现了与客户端相同的接口,是代理...

    代理模式Demo代理模式代理模式Demo

    代理模式的核心思想是为一个对象提供一个代理,使得代理对象可以在不改变原有对象行为的前提下,增加额外的功能或者控制原对象的访问。这种模式可以用于延迟加载、安全控制、统计分析等多种场景。 在代理模式中,有...

    IOS开发代理模式demo

    - **智能引用代理**:提供额外的逻辑,比如增加引用计数,防止对象过早释放。 3. **在iOS中的应用**: - **UITableView/UICollectionView的数据源代理**:负责填充表格或集合视图的数据,如`...

    代理模式Demo

    代理模式属于结构型设计模式,它创建了一个代理对象来控制对原对象的访问。代理对象与目标对象具有相同的接口,这样客户端就可以透明地调用代理对象,而无需知道目标对象的细节。代理对象可以添加额外的操作,如...

    代理模式小例子

    代理模式是一种设计模式,它在软件工程中扮演着重要的角色,允许我们为其他对象提供一个替代接口,以控制对原对象的访问。这种模式的主要目的是为了增加灵活性、安全性或者为对象提供额外的功能,同时保持客户端代码...

Global site tag (gtag.js) - Google Analytics