Java设计模式——代理模式实例

简介: 本文目录1. 代理的意思2. 一个完美的代理模式场景——代驾3. 实现

1. 代理的意思

代理就是代替别人处理,在面向对象里面就是一个对象代替另一个对象做事。那肯定是做的一个事,比如代替另一个对象去买菜,代替去排队。


代理对象和被代理对象都得能做这件事,怎么保证这一点,都实现一个接口就可以了。因为实现接口的对象必须实现接口定义的方法,这样就保证了代理对象是有能力做这件事的。


2. 一个完美的代理模式场景——代驾

喝酒不开车这个道理都懂,但是开车到了场合实在是想喝酒咋办,没事,叫代驾。


先分析这个场景有几种元素:


1、首先得有车,没车叫啥代驾


2、得有个喝醉酒的司机,当然这个司机得有驾照,得能开车


3、得有个代驾,代驾负责将车开回家。


3. 实现

先来辆车

package org.demo.proxy;
/**
 * 汽车
 */
public class Car {
  private String carName;//汽车名字
  public String getCarName() {
    return carName;
  }
  public void setCarName(String carName) {
    this.carName = carName;
  }
} 

然后保证能开车的资格,实际上就是司机认证

package org.demo.proxy;
/**
 * 代理接口-表示拥有驾驶者资格-喝酒的司机和代驾都拥有驾驶者资格
 */
public interface IDriver {
  /**
   * 开车
   */
  void driveCar();
}

如果没代驾,司机自己开车很危险

package org.demo.proxy;
/**
 * 喝酒的司机
 */
public class DrinkedDriver implements IDriver{
  /**
   * 私有轿车
   */
  private Car car;
  public DrinkedDriver(Car car) {
    this.car=car;
  }
  @Override
  public void driveCar() {
    System.out.println("DrinkedDriver的"+car.getCarName()+"在行驶");
  }
  public static void main(String[] args) {
    //在这个故事里有一辆车
    Car car=new Car();
    //车的名字是奔驰
    car.setCarName("奔驰");
    //有一个喝了酒的司机,开奔驰,这是违法行为
    DrinkedDriver dDriver=new DrinkedDriver(car);
    dDriver.driveCar();
  }
}

叫了代驾,安全回家

package org.demo.proxy;
/**
 * 代驾
 * 
 * @author easypanda
 */
public class ProxyDriver implements IDriver {// 代驾必须得有驾照,不然怎么代理别人开车?
  /**
   * 代驾不需要有车,代驾有代理对象——醉酒司机
   */
  private DrinkedDriver dDriver;
  /**
   * 每次开始业务的时候还是需要先找到客户的车
   */
  public ProxyDriver(Car car) {
    this.dDriver = new DrinkedDriver(car);// 现在代驾知道了客户和客户的车,可以把客户放车上,代驾坐驾驶位
  }
  @Override
  public void driveCar() {
    System.out.println("代驾接管车钥匙");
    dDriver.driveCar();
    System.out.println("代驾安全将客户送至家中");
  }
  public static void main(String[] args) {
    // 在这个故事里有一辆车
    Car car = new Car();
    // 车的名字是奔驰
    car.setCarName("奔驰");
    // 有一个代驾找到了喝酒司机的车
    ProxyDriver pDriver=new ProxyDriver(car);
    pDriver.driveCar();
  }
}
相关文章
|
2月前
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
180 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
8天前
|
设计模式 前端开发 数据安全/隐私保护
前端必须掌握的设计模式——代理模式
代理模式(Proxy Pattern)是一种结构型设计模式,通过引入“替身”对象来间接访问真实对象,从而解耦并提升性能和安全性。例如,知名艺人复出后,经纪人作为代理筛选商单,确保只处理符合团队利益的请求。代码实现中,定义接口`IService`,艺人和经纪人都实现该接口,经纪人在访问时进行过滤和转发。代理模式常用于权限控制、性能优化等场景,如前端中的Tree-shaking和ES6的Proxy构造方法。
前端必须掌握的设计模式——代理模式
|
28天前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
1月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
39 4
|
2月前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
2月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
54 0
[Java]23种设计模式
|
1月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
2月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
存储 Java 数据安全/隐私保护
Java中的域,什么是域?计算机语言中的域是什么?(有代码实例)
文章解释了Java中域的概念,包括实例域、静态域、常量域和局部域,以及它们的特点和使用场景。
87 2
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。