`
geeksun
  • 浏览: 965024 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

代理模式之静态代理

 
阅读更多

代理模式:

为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,

而代理对象可以在客户端和目标对象之间起到中介的作用。

比如:代理服务器、产品代理、工商代理、会计代理、房地产中介、职业中介等。

 

组成:

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

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

真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。

 

这里是一个代理服务器的实现代理模式example code:

抽象角色:

/**
 * 服务器
 * Created by jiangzhq on 2015/6/23.
 */
public interface Server {
    public void service();
}

 

真实角色:提供真实的服务

/**
 * 外网服务器,提供访问境外服务
 * Created by jiangzhq on 2015/6/23.
 */
public class InternetServer implements Server{

    public void service() {
        System.out.println("外网服务器,提供访问境外服务");
    }
}

 

代理角色:代替真实角色执行动作,需要注入真实角色,有多种方法注入:构造函数、set方法等

/**
 * 代理服务器,除提供境外网站服务,还需要突破GFW封锁
 * Created by jiangzhq on 2015/6/23.
 */
public class ProxyServer implements Server {

    InternetServer server;
    //  注入真实角色
    public ProxyServer() {
        server = new InternetServer();
    }

    public void service() {
        before();
        server.service();
        after();
    }

    public void before(){
        System.out.println("突破GFW封锁");
    }

    public void after(){
        System.out.println("使用代理服务器可以访问境外服务,是明智的选择");
    }

}

 

/**
 * 客户端测试类
 * Created by jiangzhq on 2015/6/23.
 */
public class ProxyTest {

    public static void main(String[] args) {
        Server proxyServer = new ProxyServer();
        proxyServer.service();
    }
}

 

代理模式的设计,是使用抽象类或接口作为“抽象角色”,每个“代理角色”代理一个“真实角色”。

使用代理模式,可以在不改变原有类的基础上,增加额外的功能,代码做到了无污染,低耦合,符合开闭原则。

本文的这种代码实现方式,是静态代理模式,虽然对原来代码无污染,但如果被代理的类数目多,会需要写很多的代理类代码,势必造成系统臃肿,使用动态代理可以解决这个问题,且看下一文 代理模式之动态代理 。

分享到:
评论

相关推荐

    代理模式之静态代理---数据库连接池对象实现原理

    在本主题“代理模式之静态代理---数据库连接池对象实现原理”中,我们将探讨如何使用静态代理来实现数据库连接池。数据库连接池是现代应用中常用的优化手段,它可以高效地管理数据库连接,避免频繁地创建和关闭连接...

    代理模式_静态代理.zip

    设计模式之代理模式_静态代理的一个java实现的demo。主类在Client中。仅代码实现,可供初学者参考使用

    优秀的设计模式示例-静态代理模式

    在这个例子中,"优秀的设计模式示例-静态代理模式"提供了实际项目中的代码实例,旨在帮助开发者更好地理解和应用静态代理模式。 静态代理模式的核心思想是通过代理类来代理原始对象(也称为真实对象或服务对象),...

    Java 静态代理模式

    Java静态代理模式是一种设计模式,它允许我们为一个对象提供一个代理,以便增强或扩展其功能,同时不改变原有对象的代码。在Java中,静态代理是通过在代理类中显式实现目标接口来实现的。下面将详细介绍静态代理模式...

    Java设计模式——代理设计模式(静态代理和动态代理)

    在Java编程中,设计模式是一种解决常见问题的模板或最佳实践,它可以帮助开发者编写更加灵活、可维护和可扩展的代码。代理设计模式是其中的一种,它的主要作用是在...在实际开发中,应根据项目需求选择合适的代理模式。

    设计模式(八)之静态代理模式.zip

    静态代理模式是设计模式中的一种,它属于结构型模式,主要用来在不修改原有对象的基础上,通过一个代理对象来增强或扩展原对象的功能。在本篇文章中,我们将深入探讨静态代理模式的概念、工作原理以及其优缺点。 ##...

    java静态代理、动态代理、装饰设计模式

    在Java编程中,代理模式是一种常见的设计模式,它允许我们为一个对象提供一个代理以控制对这个对象的访问。代理模式通常用于增加额外的功能或在访问原对象时进行额外的操作,比如日志记录、安全控制、性能统计等。...

    java 设计模式之代理模式(Proxy Pattern)实现代码及设计详解:动态代理模式、静态代理模式

    代理模式分为两种主要类型:静态代理和动态代理。 **静态代理** 在静态代理中,代理类和目标类都是在编译时就已经确定的。我们首先创建一个目标类接口,然后创建一个实现这个接口的代理类,同时代理类还持有目标类...

    Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理)

    Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理) Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解...

    代理模式的各种实现 (动态代理、静态代理)

    代理模式在Java中主要有两种实现方式:静态代理和动态代理,其中动态代理又分为JDK动态代理和CGlib代理。 1. 静态代理 静态代理是程序员手动创建代理类并实现与目标类相同接口的方式。在静态代理中,代理类和目标类...

    Java 代理 代理模式 静态代理与动态代理 常见的动态代理实现 .md

    代理模式可以进一步细分为静态代理和动态代理。 - **静态代理**:在程序编译时就已经确定代理类的具体实现方式。这意味着每次需要代理不同的操作时,都需要修改代理类的代码,这违反了软件工程中的开闭原则。 - **...

    代理模式(静态)

    静态代理是代理模式的一种实现方式,它在编译时就已经确定了代理关系。 代理模式的核心在于,它提供了一个代理类,该类实现了与目标类相同的接口,这样客户端就可以通过代理类来间接调用目标类的方法。代理类通常会...

    代理模式-静态动态代理-jdk动态代理-cglib动态代理

    在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最基础的代理实现方式。在静态代理中,我们需要创建一个代理类,这个代理类与原始类(被代理类)...

    Java静态代理和动态代理

    Java的代理模式通过代理类提供了对委托类的扩展和控制,静态代理适合对已有代码不做修改的情况,而动态代理则提供了更高的灵活性和扩展性。在实际应用中,应根据项目需求和性能考虑选择静态代理或动态代理。对于需要...

    java设计模式【之】静态代理【源码】【场景:帮爸爸买菜】.rar

    java设计模式【之】静态代理【源码】【场景:帮爸爸买菜】.rar * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用 * ...

    java 设计模式 静态代理模式

    //代理模式内部引用了真实角色 public void requst() { this.preRequest(); //在真实角色操作之前所附加的操作 if(null == realsubject) { realsubject = new ReallSubject(); } realsubject.requst(); // ...

    JAVA设计模式之代理模式实例

    代理模式主要分为静态代理和动态代理两种类型。 1. 静态代理 在静态代理中,代理类和目标类是在编译时就已经确定的,它们通常具有相同的接口。客户端通过代理类调用方法,代理类再转发到目标类。以下是一个简单的...

    静态代理与动态代理Demo

    代理模式分为静态代理和动态代理两种主要形式,每种都有其特定的应用场景和优势。下面我们将深入探讨这两种代理模式,并通过一个“黄牛买票”的例子来具体说明。 首先,我们来看静态代理。静态代理是程序员在编译时...

Global site tag (gtag.js) - Google Analytics