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();
  }
}
相关文章
|
5月前
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
367 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
2月前
|
设计模式 缓存 Java
「全网最细 + 实战源码案例」设计模式——代理模式
代理模式(Proxy Pattern)是一种结构型设计模式,通过代理对象控制对目标对象的访问并添加额外功能。它分为静态代理和动态代理,后者包括JDK动态代理和CGLIB动态代理。JDK动态代理基于接口反射生成代理类,而CGLIB通过继承目标类生成子类。代理模式适用于延迟初始化、访问控制、远程服务、日志记录和缓存等场景,优点是职责分离、符合开闭原则和提高安全性,缺点是增加系统复杂性。
82 25
|
2月前
|
存储 Java 计算机视觉
Java二维数组的使用技巧与实例解析
本文详细介绍了Java中二维数组的使用方法
63 15
|
2月前
|
缓存 Java 开发者
Java字面量详解:概念、分类与使用实例
本文介绍了Java字面量的概念、分类及应用。
63 11
|
3月前
|
设计模式 前端开发 数据安全/隐私保护
前端必须掌握的设计模式——代理模式
代理模式(Proxy Pattern)是一种结构型设计模式,通过引入“替身”对象来间接访问真实对象,从而解耦并提升性能和安全性。例如,知名艺人复出后,经纪人作为代理筛选商单,确保只处理符合团队利益的请求。代码实现中,定义接口`IService`,艺人和经纪人都实现该接口,经纪人在访问时进行过滤和转发。代理模式常用于权限控制、性能优化等场景,如前端中的Tree-shaking和ES6的Proxy构造方法。
前端必须掌握的设计模式——代理模式
|
4月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
4月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
66 4
|
5月前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
5月前
|
Java Spring 数据库连接
[Java]代理模式
本文介绍了代理模式及其分类,包括静态代理和动态代理。静态代理分为面向接口和面向继承两种形式,分别通过手动创建代理类实现;动态代理则利用反射技术,在运行时动态创建代理对象,分为JDK动态代理和Cglib动态代理。文中通过具体代码示例详细讲解了各种代理模式的实现方式和应用场景。
92 0
[Java]代理模式
|
5月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
104 0
[Java]23种设计模式