`

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

阅读更多

[关键字]: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中,代理对象可以用来实现弱引用或软引用,避免内存泄漏。 代理模式有多种实现方式,包括静态代理和动态代理。静态代理是在编译时就确定了代理关系,而动态代理则可以在运行时动态生成代理类...

    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

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

    代理模式小例子

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

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

    4. 智能引用:代理对象除了提供对目标对象的引用外,还可以记录目标对象的使用情况,如计数器等。 总的来说,代理模式是一种强大的设计模式,它可以在不修改原有对象的情况下,为对象添加新的功能,提高系统的灵活...

Global site tag (gtag.js) - Google Analytics