Java设计模式之代理模式-举例加代码

学习设计模式的意义:

学习java的设计模式对java初级阶段的学习会起到很大的作用,因为他灵活的运用了java的三大特性继承,抽象和多态,理解这些设计模式也对逻辑思维的训练意义很大,今天来说一下代理设计模式。

什么是代理设计模式:

代理模式是Java常见的设计模式之一。所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。

为什么要采用这种间接的形式来调用对象呢?:

一般是因为客户端不想直接访问实际的对象,或者访问实际的对象存在困难,因此通过一个代理对象来完成间接的访问。
举例:
在现实生活中,这种情形非常的常见,比如请一个律师代理来打官司,律师调用了自己打官司的方法,实际上方法里新建了你自己的对象然后,调用了你自己的打官司的方法,这就是‘代理’你去打官司了。
再比如买火车票不一定在火车站买,也可以去代售点,只不过代售点实现了一个售票员的身份,完成了售货员的功能。

优缺点:

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

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

代码演示:

步骤 1
创建一个名为谈判的接口,创建接口的目的是为下面那些实现了接口的类,可以共同实现接口的方法,并且还可以运用多态,实现函数返回的灵活性和方法调用的灵活性。

public interface Negotiation {
   void negotiate();
}

//创建实现接口的实体类。


public class RealNegotiation  implements Negotiation  {
 
   private String court;//法庭
 
   public RealNegotiation  (String court){
      this.court= court;
      negotiationFromCourt(court);
   }
 
   @Override
   public void negotiate() {
      System.out.println("negotiating in normal" + court);
   }
 
   private void negotiationFromCourt(String court){
      System.out.println("Negotiating in court" + court);
   }
}

创建ProxyNegotiation.java

public class ProxyNegotiation implements Negotiation{
 
   private RealNegotiation realNegotiation;
   private String court;
 
   public ProxyNegotiation (String court){
      this.court= court;
   }
 
   @Override
   public void negotiate() {
      if(realNegotiation== null){
         realNegotiation= new RealNegotiation (court);
      }
      realNegotiation.negotiate();
   }
}

步骤 3
当被请求时,使用 ProxyNegotiation 来获取 RealNegotiation 类的对象。

Demo.java

public class Demo {
   
   public static void main(String[] args) {
      Negotiation negotiation= new ProxyNegotiation ("协商资料");
 
      // 协商将从法庭协商
      negotiation.negotiate(); 
      System.out.println("");
      // 协商不需要从法庭协商
      negotiation.negotiate();  
   }
}

步骤 4
执行程序,输出结果:

Negotiating in court 协商资料
negotiating in normal 协商资料

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的Java代码示例,演示了如何使用代理模式来访问远程服务器: ```java // 远程接口 interface RemoteService { String getData(String query); } // 实现远程接口的具体类 class RemoteServiceImpl implements RemoteService { public String getData(String query) { // 实际的远程调用代码 System.out.println("Querying remote server with query: " + query); return "Result for " + query; } } // 代理类 class RemoteServiceProxy implements RemoteService { private RemoteService remoteService; public RemoteServiceProxy() { this.remoteService = new RemoteServiceImpl(); } public String getData(String query) { // 在访问远程服务器之前进行身份验证、缓存数据、记录日志等操作 System.out.println("Authenticating user..."); System.out.println("Checking cache for data..."); // 如果已经缓存了数据,直接返回缓存的结果 String cachedResult = getCachedResult(query); if (cachedResult != null) { return cachedResult; } // 否则,访问远程服务器并记录结果到缓存中 String result = remoteService.getData(query); cacheResult(query, result); System.out.println("Logging query and result..."); return result; } private String getCachedResult(String query) { // 检查缓存中是否已经有结果 return null; } private void cacheResult(String query, String result) { // 将结果缓存起来 } } // 使用代理类访问远程服务器 RemoteService proxy = new RemoteServiceProxy(); String result = proxy.getData("some query"); System.out.println(result); ``` 在这个示例中,`RemoteService`是远程接口,`RemoteServiceImpl`是实现该接口的具体类。`RemoteServiceProxy`是代理类,它代表了客户端和`RemoteServiceImpl`之间的中介。当客户端通过代理类访问远程服务器时,代理类会在访问服务器之前进行身份验证、缓存数据、记录日志等操作。如果已经缓存了数据,代理类会直接返回缓存的结果;否则,代理类会访问远程服务器并记录结果到缓存中。这样,代理类可以提高系统的性能、安全性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

福建沙县小吃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值